{{i18nTranslate('_layout.t11')}} {{i18nGetLang()==='zh' ? 'EN' : '中文'}}

# 网站常见问题

## 设置的网站端口无法连接怎么办？

如果在客户端无法连接已经在节点上部署的网站，那么可以从以下几点来诊断问题：

1. 检查域名对应网站已部署到对应集群，你需要在”网站列表”菜单中查看是否存在域名对应的网站，检查是否已经在网站中绑定了访问域名（当前网站”设置”–“域名”页面中）；如果你使用的是IP访问，那么请在集群设置中允许通过节点IP访问（”集群设置”–“网站设置”–“禁止未绑定域名访问”选项–“允许使用节点IP访问”子选项）；
2. 检查域名已经解析到节点。如果你使用了域名，请确保域名解析生效而且是正确的，可以使用`ping`命令来确认，类似于（把其中的 `goedge.cloud` 换成你自己的域名）：

       ping goedge.cloud

   检查是否能够Ping通，以及Ping的结果出现的IP是否是你的服务器节点的IP。
3. 检查网站是否已经设置了监听端口，在网站设置HTTP和HTTPS中查看，一般为HTTP的`80`端口，HTTPS的`443`端口；
4. 检查节点进程是否已经启动，通常可以在服务器上通过 `ps` 命令来检查：

       ps ax|grep edge-node

   结果应该类似于：

       [root@web001 ~]# ps ax|grep edge-node
       7930 ?        Sl    65:32 bin/edge-node

   其中 `7930`（不是固定的） 就是`edge-node`的进程ID，如果没有这一行，则说明你的边缘节点没有启动，请执行 `edge-node start` 启动节点；如果执行命令后，仍然不显示进程，可以进入步骤4检查日志；
5. 检查启动过程中有无错误，可以通过edge-node安装目录下的 `logs/run.log` 文件来查看启动日志：

       cd $EdgeNode安装目录
       tail -f logs/run.log

   可以通过查看 `logs/panic.log` 来查看是否有严重错误：

       cd $EdgeNode安装目录
       cat logs/panic.log

   如果有严重错误，请及时上报给开发者以寻求帮助；
6. 检查端口是否已监听，假设 `80` 和 `443` 是你指定的网站端口：

       # 以下这两条命令要分开运行
       netstat -anp|grep 80|grep LISTEN
       netstat -anp|grep 443|grep LISTEN

   检查是否能返回内容，如果没有这些端口在监听，那么可能的几个原因有：
   1. 当前节点所在集群上没有部署任何网站；
   2. 网站没有设置正确的端口号；
   3. 网站没有部署到对应的集群中；
   4. 节点没有启用，如果已经启用，在”节点详情”中将会显示”已启用”；
   5. 节点没有处在正确的集群中；
   6. 你使用的用户非root、非sudo分组下的用户或者是sudo用户但是没有在SSH认证中选择“执行sudo”。
7. 如果节点已经在监听，但是访问到的是别的服务（比如`nginx`），那么说明有端口冲突，请停用或者修改其他服务；
8. 检查边缘节点是否有防火墙，可以在客户端上通过 `telnet` 检查是否能够连接网站端口：

       # 以下这两条命令要分开运行
       telnet 192.168.1.100 80
       telnet 192.168.1.100 443

   其中 `192.168.1.100` 换成你的边缘节点所在服务器的IP，如果连接不了，通常是防火墙设置问题，请修改防火墙设置。如果你不确定防火墙设置是否正确，不妨先停用所有的防火墙（常见的有iptables和firewalld），然后试着访问网站，看是否能够成功，来确认是否是防火墙的问题；
9. 检查云服务控制台是否有安全策略，如果有的话，需要将相关端口（比如`80`和`443`）加入到通过名单中，比如阿里云的安全组如下：

10. 检查自己IP是否在黑名单中，可以在”网站列表”菜单–“IP名单”菜单中查询自己的IP，查看是否被封锁；
11. 检查当前IP是否被WAF的其他规则拦截（包括国家/地区封禁、省份封禁），可以在访问日志–WAF中查看WAF封禁记录；
12. 检查访问的域名是否在某些国家或地区被封禁，可以在别的地区服务器上使用curl命令来检查，看看是否能够正常访问，比如（把其中的 `goedge.cloud` 换成你自己的域名）：

        curl https://goedge.cloud

## 404 Not Found 是怎么回事？

出现 `404 Not Found`或`400 Bad Request`或者类似页面， 通常可以通用以下几个步骤排查：

1. `ping` 域名，确保域名已经正确解析到节点IP；
2. 在管理后台节点列表里查看 步骤 1 中得到的节点IP所属集群，比如叫“集群A”，然后在网站列表里查看这个网站所属集群，查看是否也叫“集群A”，如果不一致，说明域名解析设置错误；
3. 登录步骤 1 中对应IP的节点服务器，查看 `80`、`443`或者其他你自定义的端口是否被别的程序占用（比如nginx、httpd）：

       # 以下这两条命令要分开运行
       netstat -anp|grep 80|grep LISTEN
       netstat -anp|grep 443|grep LISTEN

   只有显示 `edge-node` 进程的才是正常的；如果有请停用，并重启 `edge-node` 进程（`edge-node restart`）
4. 在网站设置“访问日志”设置里启用日志；然后刷新页面，并查看访问日志，如果有访问日志，说明节点工作是正常的；如果没有访问日志，说明你访问的网站服务不是由GoEdge节点提供的，请根据第 3 步进行检查；
5. 直接访问源站，检查是否是404，如果源站是404，说明是源站的问题，请自行修复，与GoEdge无关；
6. 如果第 5 步中源站是正常的页面，那么可能你需要在源站设置里设置一个回源主机名，可以设置跟源站域名或IP是一样的，然后进行测试，如果此时是正常的，说明修复完毕；
7. 如果以上都不行，那么检查你访问的域名是否在网站设置“域名”设置里已经绑定，并在访问日志里确认访问的网站是你设置的那个网站。

## 502 Bad Gateway 是怎么回事？

出现 `502 Bad Gateway` 通常说明源站无法连接，可以在访问日志里查看详情（如果开启了访问日志的话），如下图所示：

如果找不到对应的502访问日志，说明你访问的网站不是GoEdge节点提供的，此时请检查你的域名DNS是否设置正确。

如果没有开启访问日志，请检查：

1. 你有没有在源站中设置源站；
2. 你是否在源站设置中设置了源站的专属域名，导致用户访问专属域名以外的域名时无法匹配到源站；
3. 你填写的源站的协议、域名、端口等信息是否正确；
4. 检查源站是否返回了`502`；
5. 通过 `curl` 或者 `wget` 等工具在边缘节点上直接访问源站URL，检查在边缘节点上是否能正常访问源站；
6. 如果源站设置有防火墙或者限流设置，请关闭或者设置边缘节点为白名单；
7. 关闭你的电脑或手机上的任何代理服务或VPN服务，再访问你的网站，来确认你正在使用的网络环境是否正常；
8. 换一个网络环境访问你的网站，来确认你正在使用的网络环境是否正常。

## 504 Gateway Timeout 是怎么回事？

出现 `504 Gateway Timeout` 通常说明源站连接超时，可以在访问日志里查看详情（如果开启了访问日志的话）。此时，请检查：

1. 检查源站的协议、域名、端口是否正确；
2. 源站是否返回了`504`；
3. 通过 `curl` 或者 `wget` 等工具在边缘节点上直接访问源站URL，检查在边缘节点上是否能正常访问源站；
4. 如果源站设置有防火墙或者限流设置，请关闭或者设置边缘节点为白名单。

在访问日志详情（访问日志后面图标点开）中”综合信息”页面会给出具体的错误，通常是：

- `dial tcp: xxx.xxx.xxx.xxx .. i/o timeout` - 指的是节点通过TCP连接源站超时；通常是节点和源站的网络连接状况不佳，也有可能是源站设置了一些限流、限速措施，导致边缘节点无法正常连接源站；
- `dial tcp: lookup example.com on xxx.xxx.xxx.xxx` - 指的是节点通过TCP连接域名解析服务超时，请检查节点设置的域名解析服务服务器地址是否正确、是否可以正常连接（`Linux` 上通常可以查看 `/etc/resolv.conf` ）；
- `dial udp: lookup example.com on xxx.xxx.xxx.xxx` - 指的是节点通过UDP连接域名解析服务超时，请检查节点设置的域名解析服务服务器地址是否正确、是否可以正常连接（`Linux` 上通常可以查看 `/etc/resolv.conf` ）；
- `tls handshake timeout` - TLS握手超时

## 使用CDN后报头无法读取？

有些自定义的报头经过CDN之后，源站无法读取，可能的原因是GoEdge会自动将用户自定义的报头名称换为标准的报头，比如用户的请求中含有：

    auth-key: MTIzNDU2
    X-WWW-Echo: Helo

那么，经过CDN之后，源站接收到的报头会变成：

    Auth-Key: MTIzNDU2
    X-Www-Echo: Helo

在HTTP/2中在浏览器端查看的报头可能全部是小写的，但是实际在传输中报头都是首字母大写的。

知道原因后，我们就有了解决方案：

- 方法1：修改源站的程序，从原先不标准的报头名称改为标准的报头名称，比如从 `auth-key` 改为 `Auth-Key`；
- 方法2：在网站设置”HTTP报头” – “请求报头”中自定义一个新的非标准报头，比如名称为`auth-key`，值为`${header.Auth-Key}`，这样可以强行添加一个非标准报头在请求中，源站接收到的就是非标准的`auth-key`。

## 使用CDN后浏览器无限重定向？

如果使用CDN后，浏览器端显示`Too Many Redirects`等无限重定向的现象，那么常见的可能原因有如下几个：

1. 可能原因1：源站中设置的源站域名和CDN域名一致：如果源站的域名和用户访问CDN的域名是一样的，那么CDN将无法正常读取源站；请务必检查源站设置，防止源站中域名配置和CDN冲突；
2. 可能原因2：源站地址是HTTP，但是在源站设置了自动跳转到HTTPS，所以导致源站一直在HTTP-HTTPS之间不断跳转，这种情况下，有以下几个解决方法：
   1. 取消源站的自动跳转设置（或者根据当前访问域名来判断是否跳转，而不是全部强制跳转）；
   2. 源站地址改为HTTPS的，防止源站自动跳转。

## 出现 ERR_SSL_PROTOCOL_ERROR 错误是怎么回事？

如果你在浏览器上打开网站出现类似于以下的错误：

    此网站无法提供安全连接
    xxx.com 发送的响应无效。
    ERR_SSL_PROTOCOL_ERROR

通常原因：

1. 可能开启了网站443端口，但是没有上传SSL证书导致，你可以上传证书或者关闭`443`端口来解决此问题；
2. 你没有在对应的网站里绑定当前访问的域名；
3. 可能错误地在HTTP里将端口设置为443，请改为在HTTPS里设置这个端口；
4. 你的域名解析到了错误的IP，请确保域名解析后的IP地址为所部署的集群节点IP。

## 提示 “listen tcp xxx: bind: address already in use” 错误

如果启动后，系统提示 “listen tcp xxx: bind: address already in use”，表示除了GoEdge之外还有别的服务进程在使用这个端口，导致GoEdge无法绑定同样的端口。所以，解决方法是关掉其他占用此端口的进程，再次重启边缘节点进程（`edge-node restart`）即可。

在Linux上，可以通过以下命令查看占用端口的进程：

    # 80是提示占用的端口，如果提示别的端口被占用，你需要换成别的端口
    netstat -anp|grep 80|grep LISTEN

可以把命令里的 `80` 换成你要检查的端口号。

## 提示 “listen tcp xxx:yyy: bind: cannot assign requested address”

这个提示说明当前系统无法绑定指定的端口，常见可能的原因是：

- 端口号超出了系统允许的端口范围；比如通常的Linux系统端口号不能超过65535；
- 你在监听地址中填写了IP地址，但是这个IP地址并没有绑定到系统网卡。

## 提示 “listen tcp :80: bind: permission denied”

说明你正在使用非 `root` 用户启动节点；如果使用非 `root` 用户启动，且保证此用户已经在 root 分组中，可以使用 `sudo` 启动，比如：

    sudo bin/edge-node start

## 开启HTTPS后浏览器提示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

通常的几个原因：

- 没有上传对应域名的SSL证书导致，请上传证书后再试；
- 绑定的域名没有填写正确，请在”域名”设置里查看域名是否填写正确、是否有同一个域名绑定多个服务的情形。

## 已经上传了证书但是浏览器提示不安全

如果已经在管理系统绑定了域名，且已经上传此域名对应的证书，在浏览器上访问时仍然提示”不安全”类似字样，可能的几个原因：

1. 通过`ping`命令来确认节点是正确的集群节点；
2. 登录节点检查`443`等端口，确保已经安装边缘节点程序（`edge-node`），并启用了相应的端口；
3. 你访问的是HTTP网址，而不是HTTPS网址，比如 `http://你的域名`，此时请换成HTTPS访问，直接输入 `https://你的域名` 来验证你的HTTPS设置是否成功；如果使用HTTPS访问成功，你只需要在网站设置里设置让HTTP自动跳转到HTTPS即可；
4. 你访问的域名没有在对应网站的”域名”设置里加入；
5. 你访问的域名证书不正确，请检查是否设置了正确的证书；
6. 少数用户只上传了二级域名证书却访问顶级域名，或者上传了顶级域名证书却访问二级域名，这时候需要同时上传顶级域名证书和二级域名证书；比如如果你即使上传了 `*.example.com` 的证书，那么 `example.com` 也是不能访问的，因为前者是二级域名，而后者是顶级域名，你只能再上传一个 `example.com` 的证书；
7. 找到对应的访问日志（“网站列表” – “访问日志”），观察访问的网站和节点是否正确，如果不正确，说明配置不正确，请纠正后再试
   - 如果找不到访问日志，要么是你没有开启对应网站的访问日志，要么是你域名解析到了错误的IP，要么是你的节点上有其他软件服务占用了443端口，请参考本文的“404 Not Found是怎么回事“进行排查
8. 你可能正在使用代理或者VPN软件访问你的网站，可以尝试关闭代理和VPN后再尝试看看；如果关闭代理和VPN能正常访问，说明不是CDN设置的问题

## 源站提示无法找到域名

如果源站提示 `Invalid Hostname` 之类的错误，或者提示找不到对应的网站，或者显示的是别的域名对应网站的内容，原因是你没有设置正确的回源主机名。默认情况下，回源主机名和终端用户访问的域名一致，但如果你的源站不支持用户直接访问的域名的话，可以在”源站” – “更多设置”中统一修改回源主机名，修改为源站域名；如果你每个源站域名不一样的话，可以点开修改每个源站，然后设置对应的回源主机名；如果源站使用的是特殊的端口，那么你设置的回源主机名中可能也需要添加对应的端口（比如 `example.com:9200`）。

## 499是什么错误？

客户端在发送请求过程中取消请求的时候，会记录一个499，通常可以忽略。

## 如何禁止用户通过节点IP访问网站？

可以在对应集群设置 – “网站设置”中开启”禁止未绑定域名访问”，并取消”允许使用节点IP访问”选项勾选，然后保存。

## 网站提示 `The site owner is unavailable` 是怎么回事？

通常是用户账单逾期未支付，可以再“财务管理” – “计费设置” – “逾期账单处理”中检查是否选中了“逾期后停止服务”，如果确认此项已选中，可以取消选中并保存，或者再“费用账单”中完成逾期账单的支付。

## 使用CDN后，页面有部分内容不显示怎么回事？

如果使用CDN后，页面有部分内容不显示，比如样式混乱、图片不加载等问题，通常可能有以下可能：

- 你的网页里使用了HTTP和HTTPS两种方式加载资源，如果你现在正在用HTTP协议回源，可以尝试修改为HTTPS协议回源（在单个源站设置里）
- 你的网站使用CDN后，可能产生了跨域问题，请打开浏览器开发控制台（通常为按键盘上的F12），查看具体的报错信息，然后有针对性地修改

{{i18nTranslate('_layout.t27')}}
{{i18nTranslate('_layout.t12')}}