This commit is contained in:
unknown
2026-02-04 20:27:13 +08:00
commit 3b042d1dad
9410 changed files with 1488147 additions and 0 deletions

26
EdgeUser/web/docs/@toc.md Normal file
View File

@@ -0,0 +1,26 @@
* CDN
* [HTTP](cdn/http.md)
* [HTTPS](cdn/https.md)
* [HTTP/3](cdn/http3.md)
* [WebP](cdn/webp.md)
* [访问鉴权](cdn/http-auth.md)
* [URL鉴权方式A](cdn/http-auth-type-a.md)
* [URL鉴权方式B](cdn/http-auth-type-b.md)
* [URL鉴权方式C](cdn/http-auth-type-c.md)
* [URL鉴权方式D](cdn/http-auth-type-d.md)
* [URL跳转](cdn/redirect.md)
* [防盗链](cdn/referers.md)
* [UA名单](cdn/user-agent.md)
* [CC防护](cdn/cc.md)
* [访客IP地址](cdn/remote-addr.md)
* [Websocket](cdn/websocket.md)
* [HTTP报头](cdn/http-header.md)
* [CORS跨域设置](cdn/cors.md)
* [PROXY Protocol](cdn/proxy-protocol.md)
* [IPv6](cdn/ipv6.md)
* [重写规则](cdn/rewrite.md)
* [请求变量](cdn/variables.md)
* [常见问题](cdn/qa.md)
* WAF
* [国家/地区封禁](cdn/waf/deny-countries.md)
* [省份封禁](cdn/waf/deny-provinces.md)

View File

@@ -0,0 +1,22 @@
# CC防护
## 简介
高级版本的CC防护功能可以用来快速开启CC防护功能。
## 设置
可以在网站“设置” -- “CC防护”中开启
![](cc1.png)
点开“更多选项”:
![](cc2.png)
其中:
* `启用CC无感防护` - 是否启用CC防护启用后自动检测并拦截CC攻击
* 更多选项
* `单IP最低QPS` - 当某个IP在1分钟内平均QPS达到此值时才会触发CC防护如果设置为0表示任何访问都会触发
* `例外URL` - 如果填写了例外URL表示这些URL跳过CC防护不做处理比如API类的调用不做限制可以填入 `/api/*`
* `限制URL` - 如果填写了支持URL表示只对这些URL进行CC防护处理如果不填则表示支持所有的URL比如只想针对搜索URL进行CC防护可以填入 `/search*`
* `检查请求来源指纹` - 在接收到HTTPS请求时尝试检查请求来源的指纹用来检测代理服务和爬虫攻击如果你在网站前面放置了别的反向代理服务请取消此选项
* `启用GET302校验` - 选中后表示自动通过GET302方法来校验客户端适用于网页类的应用不适用于API应用
* `使用自定义阈值` - 从v1.2.7版本开始)是否使用自定义阈值,默认情况下,会使用系统内置的规则,如果想自己修改,可以选中此选项,并根据自己的需要填入各个时间范围内的请求数限制

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

View File

@@ -0,0 +1,37 @@
# CORS跨域设置
## 问题
在跨域访问网站时经常会遇到被CORS策略拦截问题浏览器控制台上会出现类似于以下的提示
~~~
Access to XMLHttpRequest at 'http://example.com/post' from origin 'http://example.com:2345' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
~~~
## 解决方案
在对应网站"设置"中 -- "HTTP报头"设置 -- "响应报头"中修改"CORS自适应跨域"
![](cors1.png)
点击上图中的"修改"按钮,弹出窗口:
![](cors2.png)
选中"启用CORS自适应跨域",并"保存",其他选项通常不需要修改,界面会出现"已启用"
![](cors3.png)
这样在客户端访问网站时响应报头会自动增加以下内容:
~~~yaml
Access-Control-Allow-Credentials: ...
Access-Control-Allow-Methods: ...
Access-Control-Allow-Origin: ...
Access-Control-Expose-Headers: ...
Access-Control-Request-Method: ...
~~~
CORS跨域设置中更多选项说明除非你对CORS策略非常了解否则不要轻易修改这些选项
* `允许的请求方法列表` - `Access-Control-Allow-Methods`值设置。所访问资源允许使用的方法列表,不设置则表示默认为`PUT``GET``POST``DELETE``HEAD``OPTIONS``PATCH`
* `预检结果缓存时间` - `Access-Control-Max-Age`值设置。预检结果缓存时间0或者不填表示使用浏览器默认设置。注意每个浏览器有不同的缓存时间上限
* `允许服务器暴露的报头` - `Access-Control-Expose-Headers`值设置。允许服务器暴露的报头,请注意报头的大小写
* `实际请求方法` - `Access-Control-Request-Method`值设置。实际请求服务器时使用的方法,比如`POST`
* `仅OPTIONS有效` - 选中后表示当前CORS设置仅在OPTIONS方法请求时有效其他方法响应报头中不会出现这些跨域相关报头
## 常见问题
### 为什么直接在响应报头中添加 `Access-Control-Allow-Origin: *` 仍然会提示错误?
因为在请求响应交互过程中有Cookie等验证信息时浏览器来源站点列表`Access-Control-Allow-Origin`)中不允许使用星号(`*`)通配符,所以在任何情况下请使用本文中"CORS自适应跨域功能",会自动处理这种情况。

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,37 @@
# URL鉴权方式A
## 示例URL
~~~
https://example.com/images/test.jpg?sign=1661824870-c6d1a57067b21f7b-0baac47b6c2ad519bb1bfe7babff37a3
~~~
## URL生成规则
~~~
(http|https)://域名/文件路径?sign=时间戳-随机字符串-Hash值
~~~
其中:
* `sign` - 为默认的签名参数,可以自行修改
* `域名` - 保留原来的域名,比如 `example.com`
* `/文件路径` - 文件路径包含了最前面的斜杠(`/`)符号,比如 `/images/test.jpg`
* `时间戳` - Unix时间戳单位是秒比如 `1661824870`
* `随机字符串` - 你自定义的随机字符串,只能包含字母、数字,比如 `c6d1a57067b21f7b`,也可以是一个固定的值,比如 `hello`,但固定值会降低安全性
* `Hash值` - 目前只支持MD5 Hash算法具体为
~~~~javascript
md5("/文件路径@时间戳@随机字符串@密钥")
~~~~
其中密钥是你在创建鉴权方式时生成或填写的鉴权密钥;各个字段使用 `@` 符号连接,且文件路径前的斜杠(`/`)别忘记填写,也不要重复填写;以密钥为 `123456` 为例:
~~~~javascript
md5("/images/test.jpg@1661824870@c6d1a57067b21f7b@123456") // => 0baac47b6c2ad519bb1bfe7babff37a3
~~~~
结果需要是一个32位的仅包含小写字母和数字的字符串如果你使用的算法结果是大写的请转换为小写的
## 回源规则
查找缓存和回源规则时,会自动移除 `sign` 参数
## 常见问题
### URL中可以添加其他参数吗
URL中可以添加其他参数比如
~~~
https://example.com/images/test.jpg?sign=1661824870-c6d1a57067b21f7b-0baac47b6c2ad519bb1bfe7babff37a3&v=1&from=google
~~~
其中 `v=1&from=google` 参数是自定义参数,可以正确回源到源站。

View File

@@ -0,0 +1,35 @@
# URL鉴权方式B
## 示例URL
~~~
https://example.com/1661824870/64bf8671521f2a61a3b64691fde82729/images/test.jpg
~~~
## URL生成规则
~~~
(http|https)://域名/时间戳/Hash值/文件路径
~~~
其中:
* `域名` - 保留原来的域名,比如 `example.com`
* `/文件路径` - 文件路径包含了最前面的斜杠(`/`)符号,比如 `/images/test.jpg`
* `时间戳` - Unix时间戳单位是秒比如 `1661824870`
* `Hash值` - 目前只支持MD5 Hash算法具体为
~~~~javascript
md5("/文件路径@时间戳@密钥")
~~~~
其中密钥是你在创建鉴权方式时生成或填写的鉴权密钥;各个字段使用 `@` 符号连接,且文件路径前的斜杠(`/`)别忘记填写,也不要重复填写;以密钥为 `123456` 为例:
~~~~javascript
md5("/images/test.jpg@1661824870@123456") // => 64bf8671521f2a61a3b64691fde82729
~~~~
结果需要是一个32位的仅包含小写字母和数字的字符串如果你使用的算法结果是大写的请转换为小写的
## 回源规则
查找缓存和回源规则时,会自动移除路径中的 `时间戳``Hash值`
## 常见问题
### URL中可以添加其他参数吗
URL中可以添加其他参数比如
~~~
https://example.com/1661824870/64bf8671521f2a61a3b64691fde82729/images/test.jpg?v=1&from=google
~~~
其中 `v=1&from=google` 参数是自定义参数,可以正确回源到源站。

View File

@@ -0,0 +1,35 @@
# URL鉴权方式C
## 示例URL
~~~
https://example.com/64bf8671521f2a61a3b64691fde82729/1661824870/images/test.jpg
~~~
## URL生成规则
~~~
(http|https)://域名/Hash值/时间戳/文件路径
~~~
其中:
* `域名` - 保留原来的域名,比如 `example.com`
* `时间戳` - Unix时间戳单位是秒比如 `1661824870`
* `/文件路径` - 文件路径包含了最前面的斜杠(`/`)符号,比如 `/images/test.jpg`
* `Hash值` - 目前只支持MD5 Hash算法具体为
~~~~javascript
md5("/文件路径@时间戳@密钥")
~~~~
其中密钥是你在创建鉴权方式时生成或填写的鉴权密钥;各个字段使用 `@` 符号连接,且文件路径前的斜杠(`/`)别忘记填写,也不要重复填写;以密钥为 `123456` 为例:
~~~~javascript
md5("/images/test.jpg@1661824870@123456") // => 64bf8671521f2a61a3b64691fde82729
~~~~
结果需要是一个32位的仅包含小写字母和数字的字符串如果你使用的算法结果是大写的请转换为小写的
## 回源规则
查找缓存和回源规则时,会自动移除路径中的 `Hash值``时间戳`
## 常见问题
### URL中可以添加其他参数吗
URL中可以添加其他参数比如
~~~
https://example.com/64bf8671521f2a61a3b64691fde82729/1661824870/images/test.jpg?v=1&from=google
~~~
其中 `v=1&from=google` 参数是自定义参数,可以正确回源到源站。

View File

@@ -0,0 +1,37 @@
# URL鉴权方式D
## 示例URL
~~~
https://example.com/images/test.jpg?sign=64bf8671521f2a61a3b64691fde82729&t=1661824870
~~~
## URL生成规则
~~~
(http|https)://域名/文件路径?sign=Hash值&t=时间戳
~~~
其中:
* `sign` - 为默认的签名参数,可以自行修改
* `t` - 为默认的时间戳参数,可以自行修改
* `域名` - 保留原来的域名,比如 `example.com`
* `/文件路径` - 文件路径包含了最前面的斜杠(`/`)符号,比如 `/images/test.jpg`
* `时间戳` - Unix时间戳单位是秒比如 `1661824870`
* `Hash值` - 目前只支持MD5 Hash算法具体为
~~~~javascript
md5("/文件路径@时间戳@密钥")
~~~~
其中密钥是你在创建鉴权方式时生成或填写的鉴权密钥;各个字段使用 `@` 符号连接,且文件路径前的斜杠(`/`)别忘记填写,也不要重复填写;以密钥为 `123456` 为例:
~~~~javascript
md5("/images/test.jpg@1661824870@123456") // => 64bf8671521f2a61a3b64691fde82729
~~~~
结果需要是一个32位的仅包含小写字母和数字的字符串如果你使用的算法结果是大写的请转换为小写的
## 回源规则
查找缓存和回源规则时,会自动移除 `sign``t` 参数
## 常见问题
### URL中可以添加其他参数吗
URL中可以添加其他参数比如
~~~
https://example.com/images/test.jpg?sign=64bf8671521f2a61a3b64691fde82729&t=1661824870&v=1&from=google
~~~
其中 `v=1&from=google` 参数是自定义参数,可以正确回源到源站。

View File

@@ -0,0 +1,32 @@
# 访问鉴权
可以使用访问鉴权功能,来限制用户对某些资源的访问,或者防止恶意用户盗刷资源,降低网站的无效带宽损耗。
* [URL鉴权方式A](http-auth-type-a.md)
* [URL鉴权方式B](http-auth-type-b.md)
* [URL鉴权方式C](http-auth-type-c.md)
* [URL鉴权方式D](http-auth-type-d.md)
## 设置
以"基本认证"鉴权为例,在网站"设置"--"访问鉴权"页面中,选择"启用鉴权",然后点击"添加鉴权方式"按钮,创建一个新的鉴权方式,比如"基本认证"
![http-auth-1.png](http-auth-1.png)
这样,当用户访问网站时就会在浏览器端弹出基本认证窗口:
![http-auth-2.png](http-auth-2.png)
输入我们刚才在创建鉴权方式时添加的用户名和密码就可以登录访问我们的网站资源。
### 限定文件类型和域名
你可以在某个鉴权方式中--"更多选项"中来限定文件扩展名和域名:
![http-auth-3.png](http-auth-3.png)
在上图中的示例中,我们限定了只有文件扩展名`.png``.jpg``.jpeg``.mp3``.mp4`,并且域名为 `example.com` 才会启用鉴权;其他文件扩展名的或者其他域名的,都将会直接放行。
## 多个鉴权方式
如果添加了多个鉴权方式,那么只有第一个启用的鉴权方式是有效的。
## 关闭鉴权方式
你可以取消"启用鉴权"的勾选,并保存,即为取消访问鉴权。
## 鉴权失败
如果失败,将会返回 `401 Unauthorized`,并在访问日志中标记鉴权失败时的鉴权方式。

View File

@@ -0,0 +1,41 @@
# HTTP报头
## 设置
可以在网站"设置" -- "HTTP报头"中添加自定义报头。
其中:
* `响应报头` - 发送给客户端的报头
* `请求报头` - 发送给源站的报头
添加时,请严格遵守大小写规范,比如 `Content-Type` 的以下写法都是**错误**的:
~~~
content-type
content_type
contentType
~~~
严重注意在HTTP/2中所有报头在浏览器端查看时可能显示的是小写比如`content-type`但是在GoEdge系统添加的时候一定要严格地写成`Xxx-Yyy`类似的格式。
### 变量
可以在报头值中使用变量,具体可以使用的变量列表在[这里](variables.md)查看。
### 删除报头
如果想删除一个报头,也可以在这里添加"需要删除的报头",同样注意大小写规范。
## 示例
### 传递IP地址
有时候需要使用一个自定义的报头(比如叫`X-Example-Forwarded-For`向源站传递IP地址可以添加一个报头
~~~
X-Example-Forwarded-For: ${remoteAddr}
~~~
### 实现浏览器端跨域访问
在同个网页展示多个域名的资源时,比如`https://example.org`调用`https://example.com`,浏览器可能会出现类似于以下的错误提示:
~~~
Uncaught DOMException: Blocked a frame with origin "https://www.example.com" from accessing a cross-origin frame.
~~~
或者
~~~
Access to XMLHttpRequest at 'https://example.com/...' (redirected from 'https://example.org/...') from origin 'https://example.org' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
~~~
出现这些的错误提示后,当前网页可能无法正常加载。此时需要在被调用的域名(比如上面示例中的`https://example.com`)网站中增加[CORS](cors.md)相关报头。

View File

@@ -0,0 +1,14 @@
# 网站HTTP设置
一个服务需要开启HTTP设置后才能使用`http://`开头的网址访问。
在网站"设置" -- "HTTP"里:
![http1.png](http1.png)
* 启用HTTP选中后才会启用HTTP服务
* 自动跳转到HTTPS开启后所有HTTP的请求都会自动跳转到对应的HTTPS URL上默认所有的域名访问`http://`开头的网址时都会自动跳转到`https://`地址上,可以点击"更多选项"设置这个行为;
* 更多选项:
* 状态码跳转使用的HTTP状态码
* 跳转后域名或IP地址指定跳转后的HTTPS的域名或者IP地址默认和用户正在访问的域名或IP地址一致不填写就表示使用当前的域名
* 端口跳转后的端口号默认为443
* 允许的域名:允许跳转的域名,如果填写了允许的域名,那么只有这些域名可以自动跳转;
* 排除的域名:不允许跳转的域名,如果填写了排除的域名,那么这些域名将不跳转。

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

View File

@@ -0,0 +1,34 @@
# HTTP/3
## 启用网站HTTP/3功能
要想启用单个网站HTTP/3功能你需要
* 你已经启用了网站的HTTPS功能并上传了对应的SSL证书
* 在网站设置 -- HTTPS页面点击"启用HTTP/3"并保存如果没有这个选项说明你没有在对应的集群中启用HTTP/3功能。
![http3-2.png](http3-2.png)
## 测试
前提是你已经启用了浏览器的quic功能以下介绍可能根据浏览器语言设置不同而有不同的描述
* `Google Chrome` - 在浏览器上访问 `chrome://flags/#enable-quic`,找到"Experimental QUIC protocol"并启用之Enabled
* `Microsoft Edge` - 在浏览器上访问 `edge://flags/#enable-quic`,找到"Experimental QUIC protocol"并启用之Enabled
* `Firefox` - 在浏览器上访问 `about:config`,然后搜索"network.http.http3.enable"并点击对应行末尾的切换图标启用之true
* `Safari` - 最新版本的Safari已经自动支持HTTP/3无需任何额外配置
浏览器设置后,可能需要清理浏览器缓存并重启后才能生效。
在网站中启用HTTP/3功能后可以在浏览器正常访问你的网站域名并在浏览器控制台通常是F12快捷键观察访问使用的协议Protocol如果显示h3或者HTTP/3就说明你已经成功启用了网站的HTTP/3功能。
## 常见问题
### 为什么设置后仍然不能使用HTTP/3访问
可能的几个原因,请依次认真检查:
1. 你没有在网站中开启HTTP/3功能请参考本文中的 "启用单个网站HTTP/3功能" 部分进行检查;
2. 在浏览器控制台中检查响应Header中是否含有不区分大小写 `Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000` 的内容如果没有则说明你没有在网站中开启HTTP/3功能
3. 检查你的浏览器是否设置了代理服务器或者你的电脑是否设置了代理服务器由于绝大部分代理服务器只支持TCP通讯所以如果你的电脑上有任何代理服务器请先停用
4. 尝试清空浏览器所有缓存后,关闭浏览器,再重新打开;
5. 另外注意Websocket目前不支持HTTP/3。
### 一定需要开启HTTP/2才能使用HTTP/3吗
不需要,两个是独立的不相互影响。
### 为什么关闭HTTP/3后访问的仍然是HTTP/3
浏览器端会记住你的HTTP/3设置所以在单个网站关闭HTTP/3功能后你访问到的仍然可能是HTTP/3此时你需要清空浏览器设置并重启浏览器后重试。

View File

@@ -0,0 +1,64 @@
# 网站HTTPS设置
可以使用HTTPS保护网站数据一个网站需要开启HTTPS设置后才能使用`https://`开头的网址访问。
在网站"设置" -- "HTTPS"里:
![https1](https1.png)
* 启用HTTPS选中后才会启用HTTPS服务
## SSL/TLS相关设置
* 启用HTTP/2选中后将支持HTTP/2
* 选择证书启用HTTPS后必须上传至少一个证书才能让HTTPS服务生效证书的域名需要和服务里绑定的域名一致
* TLS最低版本选择支持的TLS最低版本
* 更多选项:
* 加密算法套件:可以自定义支持的加密套件;
* 是否开启HSTS是否支持HSTS此功能可以让当前域名或者子域名自动从HTTP跳转到HTTPS详情可以看本文[HSTS](#HSTS)部分;
* 客户端认证方式:可以设置客户端是否需要证书;
* 客户端认证CA证书用来校验客户端证书以增强安全性通常不需要设置。
## HSTS
可以通过设置HSTS来强制浏览器使用安全的连接。可以在"SSL/TLS相关设置" -- "更多选项"中开启。开启后请求HTTPS时会自动发送一个响应Header
~~~
Strict-Transport-Security: max-age=31536000; includeSubDomains
~~~
之后所有使用HTTP协议的请求也会自动转到HTTPS直到HSTS过了有效期`max-age`)。
如果你在使用Google Chrome浏览器可以在浏览器上访问
~~~
chrome://net-internals/#hsts
~~~
来管理HSTS域名。
## OCSP Stapling
从v0.4.5开始可以设置HTTPS服务是否启用OCSP Stapling功能。
### 开启或关闭
可以在网站的"HTTPS"或者"TLS"设置中--"更多选项"--"OCSP Stapling"中开启或者关闭此功能。
### 使用OpenSSL检查链接的OCSP状态
可以使用 `openssl` 命令检查连接OCSP状态
~~~bash
openssl s_client -connect example.com:443 -servername example.com -status
~~~
可以把其中的两处 `example.com` 都换成你要检查的域名。
返回内容中如果包含了:
~~~
OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
...
~~~
就说明服务器成功返回了OCSP。
## 常见问题
### 怎么设置自动从HTTP跳转到HTTPS
有两种简单方法可以设置自动从HTTP跳转到HTTPS:
* ["HTTP"](http.md)设置 -- "自动跳转到HTTPS"
* ["URL跳转"](redirect.md) 设置里添加一个跳转规则。
本文前面提到HSTS也可以强制网站从HTTP跳转到HTTPS使用但通常不建议使用此功能因为会在用户浏览器上保存设置导致后期无法很方便地修改。

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

View File

@@ -0,0 +1,47 @@
# IPv6
IPv6是英文“Internet Protocol Version 6”互联网协议第6版的缩写可以视作IPv4的升级版。
一些IPv4的例子如下
~~~
192.168.1.100
220.181.108.113
~~~
都是我们最常见的形式。
一个IPv6的例子如下
~~~
2406:8c00:0:3409:133:18:203:158
~~~
可以看到各段之间用的是冒号(`:`)。
## GoEdge中的IPv6
在GoEdge中的IPv6多用于绑定的网络地址比如网络端口监听地址、源站地址等通常形式为
~~~
[IPv6地址]:端口
~~~
需要用`[]`来括住IP地址。
比如:
~~~
[2406:8c00:0:3409:133:18:203:158]:8080
~~~
但是如果不是在地址中使用IPv6就不需要用括号来括住。
目前IPv6地址可以应用在以下几个地方
* 源站地址
## 零值网络
在IPv4中我们通常使用`0.0.0.0`表示不限制网络接口的地址,也就是说比如我们绑定了`0.0.0.0`地址那么通过所有网卡绑定的IP地址都能访问。
在IPv6中我们使用
~~~
[::]:端口
[::]:8081
~~~
来表达同样的意思。而且在GoEdge中`0.0.0.0``[::]`是可以通用的,两者的效果一样,对于同一个端口来说,同时只能使用一种版本。
## 防火墙设置
如果你启用了`ip6tables`,记得在`ip6tables`中添加对应端口的ACCEPT规则。

View File

@@ -0,0 +1,34 @@
# PROXY Protocol
CDN节点和源站之间可以通过PROXY Protocol功能传递访客的真实IP。
## 设置
在单个网站设置的”源站“ -- “更多设置”页面中 -- “更多选项”中可以选中“PROXY Protocol”一栏中的复选框
![proxy-protocol1.png](proxy-protocol1.png)
然后保存即可。
其中一般情况下不用担心选择哪个版本通常来说现代的Web服务都能自动识别。
设置完成后你需要同时设置源站Web服务不然源站无法正常访问。
## 源站Web服务设置
启用PROXY Protocol后你需要在你的源站服务器上的Web服务上也启用PROXY Protocol功能以nginx为例可以使用以下配置
~~~nginx
http {
...
# 在访问日志中需要增加 $proxy_protocol_addr 变量来获取真正的访客地址
log_format main '$proxy_protocol_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent";
...
server {
# 在对应监听端口需要增加 proxy_protocol 协议支持
listen 8080 proxy_protocol;
...
}
}
~~~

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

View File

@@ -0,0 +1,80 @@
# 网站常见问题
## 502 Bad Gateway 是怎么回事?
出现 `502 Bad Gateway` 通常说明源站无法连接,可以在访问日志里查看详情(如果开启了访问日志的话)。此时,请检查:
1. 你有没有在源站中设置源站;
2. 你是否在源站设置中设置了源站的专属域名,导致用户访问专属域名以外的域名时无法匹配到源站;
3. 你填写的源站的协议、域名、端口等信息是否正确;
4. 检查源站是否返回了`502`
5. 通过 `curl` 或者 `wget` 等工具在边缘节点上直接访问源站URL检查在边缘节点上是否能正常访问源站
6. 如果源站设置有防火墙或者限流设置,请关闭或者设置边缘节点为白名单。
## 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里设置这个端口。
## 开启HTTPS后浏览器提示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
通常的几个原因:
* 没有上传对应域名的SSL证书导致请上传证书后再试
* 绑定的域名没有填写正确,请在"域名"设置里查看域名是否填写正确、是否有同一个域名绑定多个服务的情形。
## 已经上传了证书但是浏览器提示不安全
如果已经在管理系统绑定了域名,且已经上传此域名对应的证书,在浏览器上访问时仍然提示"不安全"类似字样,可能的几个原因:
1. 你访问的是HTTP网址而不是HTTPS网址比如 `http://你的域名`此时请换成HTTPS访问直接输入 `https://你的域名` 来验证你的HTTPS设置是否成功如果使用HTTPS访问成功你只需要在网站设置里设置让HTTP自动跳转到HTTPS即可
2. 你访问的域名没有在"域名"设置里加入;
3. 你访问的域名证书不正确。
## 源站提示无法找到域名
如果源站提示 `Invalid Hostname` 之类的错误,或者提示找不到对应的网站,或者显示的是别的域名对应网站的内容,原因是你没有设置正确的回源主机名。默认情况下,回源主机名和终端用户访问的域名一致,但如果你的源站不支持用户直接访问的域名的话,可以在"源站" -- "更多设置"中统一修改回源主机名,修改为源站域名;如果你每个源站域名不一样的话,可以点开修改每个源站,然后设置对应的回源主机名;如果源站使用的是特殊的端口,那么你设置的回源主机名中可能也需要添加对应的端口(比如 `example.com:9200`)。
## 499是什么错误
客户端在发送请求过程中取消请求的时候会记录一个499通常可以忽略。
## 如何禁止用户通过节点IP访问网站
可以在对应集群设置 -- "网站设置"中开启"禁止未绑定域名访问",并取消"允许使用节点IP访问"选项勾选,然后保存。

View File

@@ -0,0 +1,51 @@
# URL跳转
URL跳转主要允许我们设置不同域名之间的URL跳转。
## 设置跳转
可以在网站"详情" -- "URL跳转"中点击"创建"按钮创建一个规则:
![redirect1.png](redirect1.png)
如上图所示:
* 跳转前URL 跳转之前的URL需要填写完整的URL包括`http`或者`https`,如果非`80``443`的端口,也需要填入端口;
* 匹配模式:
* 匹配前缀只要访问的URL头部部分包含跳转前URL即可跳转
* 精准匹配精准匹配跳转前的URL即只有访问完全一样的URL才会跳转即用户访问的URL和我们填入的"跳转前URL"内容一模一样时才会跳转;
* 正则匹配可以在跳转前URL中使用正则表达式然后可以在跳转后URL中使用正则表达式中括号的变量比如`${1}``${2}`等;
* 是否保留URL路径参数选中后则跳转之后保留跳转之前的URL路径和参数比如跳转前的URL是`http://goedge.cn/docs?v=1`那么跳转后的URL也会带上`/docs?v=1`而变成`https://goedge.cn/docs?v=1`
* 跳转后URL系统匹配到跳转前URL之后要跳转到的URL
* 跳转状态码跳转时使用的HTTP状态码通常选择默认就行默认的HTTP状态码是`307`
* 匹配条件如果对跳转前URL匹配还有别的约束条件可以在这里添加
* 是否启用:使用启用当前规则。
各个项目填写完成后,点击底部的"保存"按钮即可保存设置。
注意:如果你设置的跳转规则没有起作用,请清空浏览器缓存或者换个浏览器尝试,确认是不是缓存的问题。
## 示例
### 所有端口跳转到单一端口
比如将所有端口号包括80/443链接都跳转到某个固定端口比如 `8888`
* 跳转前URL^(?U)(http|https)://(.+)(:\d+)?(/.*)$
* 匹配模式:正则匹配
* 跳转后URL(这里假设你的8888是httpshttps://${2}:8888${4}
不用担心访问 `8888` 时会无限跳转系统会自动判断跳转前后URL是否一致如果一致将不会重复跳转。
### 域名跳转
比如跳转前:
~~~
https://example.com/hello
https://example1.com/hello
https://example2.com/hello
~~~
跳转后:
~~~
https://goedge.cn/hello
~~~
除了可以将"跳转类型"设置为域名跳转来实现外,还可以使用正则表达式:
* 跳转前URL`^https://(.+?)/(.*)$`,表达式中的 `^` 符号表示开始,`$` 符号表示结束
* 匹配模式:正则匹配
* 跳转后URLhttps://goedge.cn/${2}
## HTTP到HTTPS
如果你的应用场景是希望将HTTP都自动跳转到HTTPS可以在[HTTP设置](http.md)里快速设置。

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

View File

@@ -0,0 +1,22 @@
# 防盗链
GoEdge提供了简单的防盗链功能可以根据请求来源`Referer`)来决定是否拦截。
## 启用防盗链
在网站设置中 -- "防盗链" 中可以启用防盗链功能:
![referers1.png](referers1.png)
其中:
* `允许直接访问网站` - 允许用户直接访问网站用户第一次访问网站时来源域名通常为空注意在某些浏览器上比如Chrome从HTTPS网站跳转到HTTP网站时可能不会携带来源域名信息
* `来源域名允许一致` - 允许来源域名和当前访问的域名一致,相当于在站内访问
* `允许的来源域名` - 允许的其他来源域名列表
* `禁止的来源域名` - 禁止的来源域名列表;如果一个来源域名既在允许的来源域名中,又在禁止的来源域名中,那么最终将会被禁止
被防盗链阻止后页面将会提示403类似于
~~~
403 Forbidden
The referer has been blocked.
Request ID: 1673496051116481000001.
~~~
如果是中文编码优先的浏览器,将会以中文进行提示。

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

View File

@@ -0,0 +1,65 @@
# 访客IP地址
可以在网站"设置"--"访客IP地址"中设置访客的IP地址获取方式。
## 影响范围
访客IP地址设置会应用于记录访问日志、检查IP黑白名单、WAF地区封禁、IP并发限制等处。
## 选项说明
### 直接获取
用户直接访问边缘节点,即 "用户 --> 边缘节点" 模式这时候可以直接从连接中读取到真实的IP地址。
### 从上级代理中获取
用户和边缘节点之间有别的代理服务转发,即 "用户 --> `[第三方代理服务]` --> 边缘节点"这时候只能从上级代理中获取传递的IP地址。
用户首先访问的第三方代理服务比如Nginx或者Squid之类的反向代理服务再通过这些服务转发到GoEdge的边缘节点边缘节点上可以自动从 `X-Real-IP``X-Forwarded-For` 两个报头中获取用户的真实IP。
### 从请求报头中读取
从GoEdge v1.2.9开始可以填写单个或多个请求报头用于从中读取真实的客户端IP
* 单个请求报头示例:`X-Real-IP``X-Client-IP``X-My-IP`
* 多个请求报头示例(使用英文逗号分隔):`X-Real-IP,X-Client-IP`
### 自定义变量
可以自定义变量,在 [这里](variables.md) 可以查看支持的请求变量。
## 错误处理
如果从选项或者变量值获得的IP地址格式是错误的非IPv4和IPv6格式则自动使用直接连接边缘节点的连接IP地址。
## 第三方代理示例
### 从Nginx传递客户端IP地址到边缘节点
如果Nginx处在GoEdge的下游就是"用户" --> Nginx --> GoEdge可以在Nginx中使用 `X-Real-IP` 报头将获取的IP地址传递给GoEdge:
~~~nginx
server {
...
location / {
proxy_pass http://127.0.0.1:8005; # proxy_pass $GOEDGE节点地址
proxy_set_header X-Real-IP $remote_addr; # 设置 X-Real-IP
proxy_http_version 1.1; # 设置HTTP/1.1
proxy_set_header Connection 'keep-alive'; # 设置保持连接
}
}
~~~
## 源站读取IP
默认地,边缘节点会传递 `X-Real-IP``X-Forwarded-For` 两个报头到源站,其中`X-Real-IP`只可能为单个IP`X-Forwarded-For`中可能包含有多个IP
~~~
# X-Forwarded-For语法
X-Forwarded-For: <client>, <proxy1>, <proxy2>
# 示例
X-Forwarded-For: 192.168.2.100, 192.168.2.1, 127.0.0.1
~~~
从上面示例中可以看出,要获取`X-Forwarded-For`中的IP值需要分隔多个IP并读取第一个。
### PHP读取客户端IP示例
~~~php
$_SERVER["HTTP_X_FORWARDED_FOR"]
$_SERVER["HTTP_X_REAL_IP"]
~~~
### Go读取客户端IP示例
~~~go
req.Header.Get("X-Forwarded-For")
req.Header.Get("X-Real-Ip") // 注意这里的Ip格式
~~~

View File

@@ -0,0 +1,15 @@
# 重写规则
可以在网站“设置” -- “重写规则”中添加重写规则将某个或者某一类URL映射到另外一个或一组URL上。
## 示例
### 示例1将 `/a/abc.html` 重写到 `/b/abc.html`
* 匹配规则:`^/a/(.+)$`
* 目标URL`/b/${1}` (其中`${1}`是匹配规则中第一个括号匹配的内容)
### 示例2将任何URL都增加一个 `/prefix` 目录
* 匹配规则:`^(.+)$`
* 目标URL`/prefix${1}` (这里没有加入`/`,因为匹配的内容中已经包含)
### 示例3将 `/123_456.html` 类似的URL重写为目录
* 匹配规则:`^/(\d+)_(\d+)\.html$` (其中`\d`表示数字,并注意`.`符号是特殊符号,需要转义变成`\.`
* 目标URL`/${1}/${2}/index.html` (变成`/123/456/index.html`

View File

@@ -0,0 +1,22 @@
# UserAgent名单
UserAgent名单简称UA名单可以根据浏览器或其他客户端发送的`User-Agent`信息决定是否拦截用户请求。
## 启用UA名单
在网站设置中 -- "UA名单"中可以启用UA名单
![user-agent1.png](user-agent1.png)
点击加号(`+`可以添加UA关键词
![user-agent2.png](user-agent2.png)
其中:
* `UA关键词` - 可以是`Chrome`,也可以使用星号(`*`)通配符,比如`*Firefox*`也可以不填任何内容直接确定表示空的UserAgent关键词不区分大小写即`Chrome`和`chrome`是一样的;
* `动作` - 可以选"允许"或"不允许"如果是不允许用此UserAgent访问时就会被阻止当既有允许的UA关键词也有不允许的UA关键词时优先判断"允许"的UA关键词一旦允许后即不再往下执行
被UA名单阻止后页面将会提示403类似于
~~~
403 Forbidden
The User-Agent has been blocked.
Request ID: 1673496724695481000001.
~~~
如果是中文编码优先的浏览器,将会以中文进行提示。

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

View File

@@ -0,0 +1,159 @@
# 内置变量
## 变量形式
在使用变量的地方,使用`${varName}`来表示变量,比如:
~~~
/${1}/hello${requestPath}?name=${arg.name}
~~~
## 内置变量列表
### 请求相关变量
* `${edgeVersion}` - 边缘节点的版本
* `${remoteAddr}` - 客户端地址IP会依次根据X-Forwarded-For、X-Real-IP、RemoteAddr获取适合前端有别的反向代理服务时使用如果前端没有别的反向代理则存在被伪造的风险
* `${rawRemoteAddr}` - 客户端地址IP返回直接连接服务的客户端原始IP地址如果前端有别的反向代理可能会返回前端反向代理的地址而不是真实的客户端地址
* `${remotePort}` - 客户端端口
* `${remoteUser}` - 客户端用户名
* `${requestId}` - 请求ID类似于`1638414954148000001`v0.3.7加入
* `${requestURI}` - 请求URI比如`/hello?name=lily`
* `${requestPath}` - 请求路径(不包括参数),比如`/hello`
* `${requestURL}` - 完整的请求URL比如`https://example.com/hello?name=lily`v0.2.5版本加入
* `${requestPathExtension}` - 请求路径中的文件扩展名,包括点符号,比如`.html``.png`
* `${requestPathLowerExtension}` 请求路径中的文件扩展名,其中大写字母会被自动转换为小写,包括点符号,比如`.html``.png`在v0.6.4中加入
* `${requestLength}` - 请求内容长度
* `${requestMethod}` - 请求方法,比如`GET``POST`
* `${requestFilename}` - 请求文件路径
* `${scheme}` - 请求协议,`http``https`
* `${proto}` - 包含版本的HTTP请求协议类似于`HTTP/1.0`
* `${timeISO8601}` - ISO 8601格式的时间比如`2018-07-16T23:52:24.839+08:00`
* `${timeLocal}` - 本地时间,比如`17/Jul/2018:09:52:24 +0800`
* `${msec}` - 带有毫秒的时间,比如`1531756823.054`
* `${timestamp}` - unix时间戳单位为秒
* `${host}` - 主机名,通常是请求的域名
* `${cname}` - 当前网站的CNAME比如38b48e4f.example.com在v0.5.8中加入
* `${host.first}` - 主机名第一段,比如`www.example.com`的值为`www`
* `${host.last}` - 主机名最后一段,比如`www.example.com`的值为`com`
* `${host.N}` - 主机名的第几段从0开始N最大为4`${host.0}``${host.1}`...`${host.4}`
* `${host.-N}` - 主机名的倒数第几段,从-1开始比如对于`www.example.com``${host.-1}`值为`com`N最大为5
* `${serverName}` - 接收请求的服务器名
* `${serverAddr}` - 服务器地址IP需要管理员设置启用后才会生效
* `${serverPort}` - 接收请求的服务器端口
* `${referer}` - 请求来源URL
* `${referer.host}` - 请求来源URL域名在v0.2.6中加入
* `${userAgent}` - 客户端信息
* `${contentType}` - 请求头部的Content-Type
* `${request}` - 构造类似于"GET / HTTP/1.1"之类的请求字符串
* `${cookies}` - 所有cookie组合字符串
* `${cookie.NAME}` - 单个cookie值比如`${cookie.sid}`
* `${isArgs}` - 问号(?标记如果URL有参数则值为`?`否则则值为空在v0.3.7中加入
* `${args}` - 所有URL参数组合字符串
* `${arg.NAME}` - 单个URL参数值比如`${arg.name}`
* `${headers}` - 所有Header信息组合字符串
* `${header.NAME}` - 单个请求Header值比如`${header.User-Agent}`
* `${documentRoot}` - 当前请求的文档根目录
#### 地区相关
* `${geo.country.name}` - 国家/地区名称v0.4.0加入
* `${geo.country.id}` - 国家/地区IDv0.4.0加入
* `${geo.province.name}` - 省份名称目前只包含中国省份v0.4.0加入
* `${geo.province.id}` - 省份ID目前只包含中国城市v0.4.0加入
* `${geo.city.name}` - 城市名称目前只包含中国城市v0.4.0加入
* `${geo.city.id}` - 城市ID目前只包含中国城市v0.4.0加入
* `${geo.town.name}` - 县级单位名称目前只包含中国县级单位v0.4.0加入
* `${geo.town.id}` - 县级单位ID目前只包含中国县级单位v0.4.0加入
#### ISP相关
* `${isp.name}` - ISP服务商名称v0.4.0加入
* `${isp.id}` - ISP服务商IDv0.4.0加入
#### 浏览器相关
* `${browser.os.name}` - 客户端所在操作系统名称v0.4.0加入
* `${browser.os.version}` - 客户端所在操作系统版本v0.4.0加入
* `${browser.name}` - 客户端浏览器名称v0.4.0加入
* `${browser.version}` - 客户端浏览器版本v0.4.0加入
* `${browser.isMobile}` - 手机标识如果客户端是手机则值为1否则为0v0.4.0加入
#### 产品相关
* `${product.name}` - 产品名,可以在"系统设置"--"管理界面设置"中设置v0.4.0加入
* `${product.version}` - 产品版本,可以在"系统设置"--"管理界面设置"中设置v0.4.0加入
### 响应相关变量
* `${requestTime}` - 请求花费时间
* `${bytesSent}` - 发送的内容长度包括Header字节
* `${bodyBytesSent}` - 发送的内容长度不包括Header字节
* `${status}` - 状态码,比如`200`
* `${statusMessage}` - 状态消息,比如`200 OK`
* `${response.contentType}` - 响应的`Content-Type`
* `${response.header.NAME}` - 响应中的Header值
### 源站相关变量
> 注意在缓存Key中不能使用源站相关变量因为读取缓存是在读取源站之前执行的。
* `${origin.id}` - 源站服务器ID
* `${origin.code}` - 源站服务器代号
* `${origin.address}` - 源站服务器地址,包含主机地址和端口
* `${origin.host}` - 源站服务器地址,只包含主机地址
* `${origin.scheme}` - 源站服务器协议
### 缓存相关变量
* `${cache.status}` - 缓存状态,值可能为:
* `BYPASS` - 没有开启缓存策略或者其他原因未通过缓存策略处理的时候,状态为`BYPASS`
* `HIT` - 已命中缓存
* `MISS` - 未命中缓存
* `PURGE` - 正在清除缓存
* `UPDATING` - 正在更新缓存v0.3.7加入
* `EXPIRED` - 已过期
* `STALE` - 正在使用过期的缓存
* `${cache.age}` - 缓存对象的有效期v0.3.7加入
* `${cache.policy.id}` - 缓存策略ID
* `${cache.policy.name}` - 缓存策略名称
* `${cache.policy.type}` - 缓存策略类型memory、file之类
* `${cache.key}` - 当前请求的缓存Keyv0.3.7加入
## 修饰符
从GoEdge v1.3.3开始,变量中可以加入修饰符,用于对变量值再次进行处理:
~~~
${varName|修饰符1|修饰符2|更多修饰符...}
~~~
目前支持以下几个修饰符:
* `urlEncode` - 对变量值进行URL编码
* `urlDecode` - 对变量值进行URL解码
* `base64Encode` - 对变量值进行Base64编码
* `base64Decode` - 对变量值进行Base64解码
* `md5` - 对变量值进行md5编码
* `sha1` - 对变量值进行sha1编码
* `sha256` - 对变量值进行sha256编码
* `toLowerCase` - 转换为小写
* `toUpperCase` - 转换为大写
示例:
~~~
${requestPath|urlEncode} // "/hello/world" => "%2Fhello%2Fworld"
${arg.name|base64Encode|md5} // "Lily" => "0374cb368f88b84dfb57bb883cca02ec"
~~~
## 匹配变量
匹配变量值的是有正则表达式的地方使用匹配结果通常为一个从0开始的数字比如在重写规则中
~~~
/(\w+)/(\w+)
~~~
那么
* `${0}` - 表示整体匹配的内容
* `${1}` - 表示第一个括号匹配的内容
* `${2}` - 表示第二个括号匹配的内容
可以使用`(?i)`来设置不区分大小写:
~~~
(?i)/index.php
~~~
更多可用的正则表达式可以参考 [RE2 Syntax](https://github.com/google/re2/wiki/Syntax)。
### 命名变量
也可以给变量设置一个名称:
~~~
/(?P<myName>\w+)
~~~
然后就可以在待替换字符串中使用 `${myName}`
~~~
/hello/${myName}
~~~

View File

@@ -0,0 +1,34 @@
# 国家/地区封禁
可以在WAF中设置只允许一组区域或者禁止一组区域访问我们的网站。
在网站设置 -- "WAF" -- "国家/地区封禁"中可以添加仅允许的区域和仅封禁的区域:
![](deny-countries.png)
其中:
* `仅允许的区域` - 只有所添加的区域才被允许访问我们的网站;
* `仅封禁的区域` - 只有所添加的区域才被禁止访问我们的网站,其他没有添加的区域都允许访问我们网站;
* 更多选项
* `例外URL` - 需要排除的URL在这里配置的URL将不会触发封禁
* `限制URL` - 只有在限制URL列表里的URL才会触发封禁
* `提示内容` - 可以设置在用户被封禁时网页上提示的文字支持完整的HTML`<html>...</html>`
上面的`仅允许的区域``仅封禁的区域`同时只会有一个有效,以`仅允许的区域`作为优先。
## 示例
### 只允许大中华区访问
大中华区包括中国内地、港澳台,所以可以在"仅允许的区域"中点击"修改",出现以下界面:
![](deny-countries2.png)
其中,我们选中"中国",就已经包含了全部大中华区,然后点"确定"
![](deny-countries3.png)
然后点击底部的"保存"按钮即可。
### 封禁缅甸访问
缅甸是我们随意选取的一个区域,仅供测试使用,可以在"仅封禁的区域"中点击"修改",出现以下界面:
![](deny-countries4.png)
其中,我们选中"缅甸",然后点"确定"
![](deny-countries5.png)
然后点击底部的"保存"按钮即可。

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

View File

@@ -0,0 +1,27 @@
# 省份封禁
可以在WAF中设置只允许一组中国省份或者禁止一组省份直辖市等访问我们的网站。
在网站设置 -- "WAF" -- "省份封禁"中可以添加仅允许的省份和仅封禁的省份:
![](deny-provinces.png)
其中:
* `仅允许的省份` - 只有所添加的省份才被允许访问我们的网站;
* `仅封禁的省份` - 只有所添加的省份才被禁止访问我们的网站,其他没有添加的省份都允许访问我们网站;
* 更多选项
* `例外URL` - 需要排除的URL在这里配置的URL将不会触发封禁
* `限制URL` - 只有在限制URL列表里的URL才会触发封禁
* `提示内容` - 可以设置在用户被封禁时网页上提示的文字支持完整的HTML`<html>...</html>`
上面的`仅允许的省份``仅封禁的省份`同时只会有一个有效,以`仅允许的省份`作为优先。
## 示例
### 只允许北京访问
可以在"仅允许的省份"中点击"修改",出现以下界面:
![](deny-provinces2.png)
然后点"确定"
![](deny-provinces3.png)
然后点击底部的"保存"按钮即可。

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

View File

@@ -0,0 +1,28 @@
# WebP
在v0.3.2以后可以设置自动将图片转换为WebP从而大幅减少带宽的使用。
## 设置
可以在网站"设置" -- "WebP"中设置:
![webp1](webp1.png)
其中:
* `启用WebP压缩` - 是否启用WebP转换注意从v0.4.7开始,只有满足缓存条件的图片内容才会被转换,防止实时转换耗费大量的系统资源;
* `支持的扩展名` - 需要转换的URL扩展名
* `支持的MimeType` - 需要转换的Content-Type类型只要一个响应的文件满足扩展名或者MimeType其中之一条件就可以被转换
* 更多选项:
* `内容最小长度` - 需要转换的图片内容最小长度;默认没有限制;
* `内容最大长度` - 需要转换的图片内容最大长度;默认没有限制;
* `匹配条件` - 额外的匹配条件。
同样的在单个路由规则中也可以设置WebP自动转换。
设置后,可以在浏览器端查看图片文件的`Content-Type`,如果是 `image/webp` 即为转换成功:
~~~
...
Content-Type: image/webp
...
~~~
WebP转换并不会修改文件的文件名。
## 缓存
由于WebP需要将图片内容全部读取后再转换消耗了更多的系统资源所以在开启WebP自动转换后请同时在缓存设置里开启对图片的缓存比如缓存`.jpg``.jpeg``.png``.ico`等扩展名的URL。

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

View File

@@ -0,0 +1,11 @@
# Websocket
可以在网站"设置" -- "Websocket"里设置是否开启Websocket。
![websocket1.png](websocket1.png)
上图中:
* 启用Websocket启用后网站才会提供Websocket功能
* 允许所有来源域:是否允许所有的来源域(`Origin`如果选中了表示允许在所有的域名上访问此Websocket
* 如果没有选中允许所有来源域,则可以设置允许的域名:
* 允许的来源域列表只允许在此列表中的来源域名访问Websocket服务
* 更多选项:
* 是否传递请求来源域选中表示把接收到的请求Header中的`Origin`字段传递到源站。

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

View File

@@ -0,0 +1 @@
请点击左侧菜单中的帮助内容。