1.4.5.2
26
EdgeUser/web/docs/@toc.md
Normal 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)
|
||||
22
EdgeUser/web/docs/cdn/cc.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# CC防护
|
||||
|
||||
## 简介
|
||||
高级版本的CC防护功能可以用来快速开启CC防护功能。
|
||||
|
||||
## 设置
|
||||
可以在网站“设置” -- “CC防护”中开启:
|
||||

|
||||
|
||||
点开“更多选项”:
|
||||

|
||||
|
||||
其中:
|
||||
* `启用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版本开始)是否使用自定义阈值,默认情况下,会使用系统内置的规则,如果想自己修改,可以选中此选项,并根据自己的需要填入各个时间范围内的请求数限制
|
||||
|
||||
BIN
EdgeUser/web/docs/cdn/cc1.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
EdgeUser/web/docs/cdn/cc2.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
37
EdgeUser/web/docs/cdn/cors.md
Normal 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自适应跨域":
|
||||

|
||||
|
||||
点击上图中的"修改"按钮,弹出窗口:
|
||||

|
||||
|
||||
选中"启用CORS自适应跨域",并"保存",其他选项通常不需要修改,界面会出现"已启用":
|
||||

|
||||
|
||||
这样在客户端访问网站时响应报头会自动增加以下内容:
|
||||
~~~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自适应跨域功能",会自动处理这种情况。
|
||||
BIN
EdgeUser/web/docs/cdn/cors1.png
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
EdgeUser/web/docs/cdn/cors2.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
EdgeUser/web/docs/cdn/cors3.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
EdgeUser/web/docs/cdn/http-auth-1.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
EdgeUser/web/docs/cdn/http-auth-2.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
EdgeUser/web/docs/cdn/http-auth-3.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
37
EdgeUser/web/docs/cdn/http-auth-type-a.md
Normal 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` 参数是自定义参数,可以正确回源到源站。
|
||||
35
EdgeUser/web/docs/cdn/http-auth-type-b.md
Normal 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` 参数是自定义参数,可以正确回源到源站。
|
||||
35
EdgeUser/web/docs/cdn/http-auth-type-c.md
Normal 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` 参数是自定义参数,可以正确回源到源站。
|
||||
37
EdgeUser/web/docs/cdn/http-auth-type-d.md
Normal 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` 参数是自定义参数,可以正确回源到源站。
|
||||
32
EdgeUser/web/docs/cdn/http-auth.md
Normal 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)
|
||||
|
||||
## 设置
|
||||
以"基本认证"鉴权为例,在网站"设置"--"访问鉴权"页面中,选择"启用鉴权",然后点击"添加鉴权方式"按钮,创建一个新的鉴权方式,比如"基本认证":
|
||||

|
||||
|
||||
这样,当用户访问网站时就会在浏览器端弹出基本认证窗口:
|
||||

|
||||
|
||||
输入我们刚才在创建鉴权方式时添加的用户名和密码就可以登录访问我们的网站资源。
|
||||
|
||||
### 限定文件类型和域名
|
||||
你可以在某个鉴权方式中--"更多选项"中来限定文件扩展名和域名:
|
||||

|
||||
|
||||
在上图中的示例中,我们限定了只有文件扩展名`.png`、`.jpg`、`.jpeg`、`.mp3`、`.mp4`,并且域名为 `example.com` 才会启用鉴权;其他文件扩展名的或者其他域名的,都将会直接放行。
|
||||
|
||||
## 多个鉴权方式
|
||||
如果添加了多个鉴权方式,那么只有第一个启用的鉴权方式是有效的。
|
||||
|
||||
## 关闭鉴权方式
|
||||
你可以取消"启用鉴权"的勾选,并保存,即为取消访问鉴权。
|
||||
|
||||
## 鉴权失败
|
||||
如果失败,将会返回 `401 Unauthorized`,并在访问日志中标记鉴权失败时的鉴权方式。
|
||||
41
EdgeUser/web/docs/cdn/http-header.md
Normal 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)相关报头。
|
||||
14
EdgeUser/web/docs/cdn/http.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# 网站HTTP设置
|
||||
一个服务需要开启HTTP设置后才能使用`http://`开头的网址访问。
|
||||
|
||||
在网站"设置" -- "HTTP"里:
|
||||

|
||||
|
||||
* 启用HTTP:选中后才会启用HTTP服务;
|
||||
* 自动跳转到HTTPS:开启后,所有HTTP的请求都会自动跳转到对应的HTTPS URL上,默认所有的域名访问`http://`开头的网址时都会自动跳转到`https://`地址上,可以点击"更多选项"设置这个行为;
|
||||
* 更多选项:
|
||||
* 状态码:跳转使用的HTTP状态码;
|
||||
* 跳转后域名或IP地址:指定跳转后的HTTPS的域名或者IP地址,默认和用户正在访问的域名或IP地址一致,不填写就表示使用当前的域名;
|
||||
* 端口:跳转后的端口号,默认为443;
|
||||
* 允许的域名:允许跳转的域名,如果填写了允许的域名,那么只有这些域名可以自动跳转;
|
||||
* 排除的域名:不允许跳转的域名,如果填写了排除的域名,那么这些域名将不跳转。
|
||||
BIN
EdgeUser/web/docs/cdn/http1.png
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
EdgeUser/web/docs/cdn/http3-2.png
Normal file
|
After Width: | Height: | Size: 256 KiB |
34
EdgeUser/web/docs/cdn/http3.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# HTTP/3
|
||||
|
||||
## 启用网站HTTP/3功能
|
||||
要想启用单个网站HTTP/3功能,你需要:
|
||||
* 你已经启用了网站的HTTPS功能,并上传了对应的SSL证书;
|
||||
* 在网站设置 -- HTTPS页面点击"启用HTTP/3",并保存,如果没有这个选项,说明你没有在对应的集群中启用HTTP/3功能。
|
||||
|
||||

|
||||
|
||||
## 测试
|
||||
前提是你已经启用了浏览器的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,此时你需要清空浏览器设置并重启浏览器后重试。
|
||||
64
EdgeUser/web/docs/cdn/https.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# 网站HTTPS设置
|
||||
可以使用HTTPS保护网站数据,一个网站需要开启HTTPS设置后才能使用`https://`开头的网址访问。
|
||||
|
||||
在网站"设置" -- "HTTPS"里:
|
||||

|
||||
|
||||
* 启用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使用,但通常不建议使用此功能,因为会在用户浏览器上保存设置,导致后期无法很方便地修改。
|
||||
BIN
EdgeUser/web/docs/cdn/https1.png
Normal file
|
After Width: | Height: | Size: 256 KiB |
47
EdgeUser/web/docs/cdn/ipv6.md
Normal 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规则。
|
||||
|
||||
|
||||
34
EdgeUser/web/docs/cdn/proxy-protocol.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# PROXY Protocol
|
||||
|
||||
CDN节点和源站之间可以通过PROXY Protocol功能传递访客的真实IP。
|
||||
|
||||
## 设置
|
||||
在单个网站设置的”源站“ -- “更多设置”页面中 -- “更多选项”中可以选中“PROXY Protocol”一栏中的复选框:
|
||||

|
||||
|
||||
然后保存即可。
|
||||
|
||||
其中,一般情况下,不用担心选择哪个版本,通常来说,现代的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;
|
||||
...
|
||||
}
|
||||
}
|
||||
~~~
|
||||
BIN
EdgeUser/web/docs/cdn/proxy-protocol1.png
Normal file
|
After Width: | Height: | Size: 318 KiB |
80
EdgeUser/web/docs/cdn/qa.md
Normal 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访问"选项勾选,然后保存。
|
||||
51
EdgeUser/web/docs/cdn/redirect.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# URL跳转
|
||||
URL跳转主要允许我们设置不同域名之间的URL跳转。
|
||||
|
||||
## 设置跳转
|
||||
可以在网站"详情" -- "URL跳转"中点击"创建"按钮创建一个规则:
|
||||

|
||||
如上图所示:
|
||||
* 跳转前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是https):https://${2}:8888${4}
|
||||
|
||||
不用担心访问 `8888` 时会无限跳转,系统会自动判断跳转前后URL是否一致,如果一致将不会重复跳转。
|
||||
|
||||
### 域名跳转
|
||||
比如跳转前:
|
||||
~~~
|
||||
https://example.com/hello
|
||||
https://example1.com/hello
|
||||
https://example2.com/hello
|
||||
~~~
|
||||
跳转后:
|
||||
~~~
|
||||
https://goedge.cn/hello
|
||||
~~~
|
||||
|
||||
除了可以将"跳转类型"设置为域名跳转来实现外,还可以使用正则表达式:
|
||||
* 跳转前URL:`^https://(.+?)/(.*)$`,表达式中的 `^` 符号表示开始,`$` 符号表示结束
|
||||
* 匹配模式:正则匹配
|
||||
* 跳转后URL:https://goedge.cn/${2}
|
||||
|
||||
## HTTP到HTTPS
|
||||
如果你的应用场景是希望将HTTP都自动跳转到HTTPS,可以在[HTTP设置](http.md)里快速设置。
|
||||
|
||||
BIN
EdgeUser/web/docs/cdn/redirect1.png
Normal file
|
After Width: | Height: | Size: 310 KiB |
22
EdgeUser/web/docs/cdn/referers.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 防盗链
|
||||
GoEdge提供了简单的防盗链功能,可以根据请求来源(`Referer`)来决定是否拦截。
|
||||
|
||||
## 启用防盗链
|
||||
在网站设置中 -- "防盗链" 中可以启用防盗链功能:
|
||||

|
||||
|
||||
其中:
|
||||
* `允许直接访问网站` - 允许用户直接访问网站,用户第一次访问网站时来源域名通常为空;注意:在某些浏览器上(比如Chrome)从HTTPS网站跳转到HTTP网站时可能不会携带来源域名信息
|
||||
* `来源域名允许一致` - 允许来源域名和当前访问的域名一致,相当于在站内访问
|
||||
* `允许的来源域名` - 允许的其他来源域名列表
|
||||
* `禁止的来源域名` - 禁止的来源域名列表;如果一个来源域名既在允许的来源域名中,又在禁止的来源域名中,那么最终将会被禁止
|
||||
|
||||
被防盗链阻止后,页面将会提示403,类似于:
|
||||
~~~
|
||||
403 Forbidden
|
||||
The referer has been blocked.
|
||||
|
||||
Request ID: 1673496051116481000001.
|
||||
~~~
|
||||
|
||||
如果是中文编码优先的浏览器,将会以中文进行提示。
|
||||
BIN
EdgeUser/web/docs/cdn/referers1.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
65
EdgeUser/web/docs/cdn/remote-addr.md
Normal 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格式
|
||||
~~~
|
||||
15
EdgeUser/web/docs/cdn/rewrite.md
Normal 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`)
|
||||
22
EdgeUser/web/docs/cdn/user-agent.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# UserAgent名单
|
||||
UserAgent名单,简称UA名单,可以根据浏览器或其他客户端发送的`User-Agent`信息决定是否拦截用户请求。
|
||||
|
||||
## 启用UA名单
|
||||
在网站设置中 -- "UA名单"中可以启用UA名单:
|
||||

|
||||
|
||||
点击加号(`+`)可以添加UA关键词:
|
||||

|
||||
其中:
|
||||
* `UA关键词` - 可以是`Chrome`,也可以使用星号(`*`)通配符,比如`*Firefox*`,也可以不填任何内容直接确定,表示空的UserAgent;关键词不区分大小写,即`Chrome`和`chrome`是一样的;
|
||||
* `动作` - 可以选"允许"或"不允许",如果是不允许,用此UserAgent访问时就会被阻止;当既有允许的UA关键词,也有不允许的UA关键词时,优先判断"允许"的UA关键词,一旦允许后即不再往下执行
|
||||
|
||||
被UA名单阻止后,页面将会提示403,类似于:
|
||||
~~~
|
||||
403 Forbidden
|
||||
|
||||
The User-Agent has been blocked.
|
||||
Request ID: 1673496724695481000001.
|
||||
~~~
|
||||
|
||||
如果是中文编码优先的浏览器,将会以中文进行提示。
|
||||
BIN
EdgeUser/web/docs/cdn/user-agent1.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
EdgeUser/web/docs/cdn/user-agent2.png
Normal file
|
After Width: | Height: | Size: 249 KiB |
159
EdgeUser/web/docs/cdn/variables.md
Normal 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}` - 国家/地区ID,v0.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服务商ID,v0.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,否则为0,v0.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}` - 当前请求的缓存Key,v0.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}
|
||||
~~~
|
||||
34
EdgeUser/web/docs/cdn/waf/deny-countries.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# 国家/地区封禁
|
||||
可以在WAF中设置只允许一组区域或者禁止一组区域访问我们的网站。
|
||||
|
||||
在网站设置 -- "WAF" -- "国家/地区封禁"中可以添加仅允许的区域和仅封禁的区域:
|
||||

|
||||
|
||||
其中:
|
||||
* `仅允许的区域` - 只有所添加的区域才被允许访问我们的网站;
|
||||
* `仅封禁的区域` - 只有所添加的区域才被禁止访问我们的网站,其他没有添加的区域都允许访问我们网站;
|
||||
* 更多选项
|
||||
* `例外URL` - 需要排除的URL,在这里配置的URL将不会触发封禁
|
||||
* `限制URL` - 只有在限制URL列表里的URL才会触发封禁
|
||||
* `提示内容` - 可以设置在用户被封禁时网页上提示的文字,支持完整的HTML(`<html>...</html>`)
|
||||
|
||||
上面的`仅允许的区域`和`仅封禁的区域`同时只会有一个有效,以`仅允许的区域`作为优先。
|
||||
|
||||
## 示例
|
||||
### 只允许大中华区访问
|
||||
大中华区包括中国内地、港澳台,所以可以在"仅允许的区域"中点击"修改",出现以下界面:
|
||||

|
||||
|
||||
其中,我们选中"中国",就已经包含了全部大中华区,然后点"确定":
|
||||

|
||||
|
||||
然后点击底部的"保存"按钮即可。
|
||||
|
||||
### 封禁缅甸访问
|
||||
缅甸是我们随意选取的一个区域,仅供测试使用,可以在"仅封禁的区域"中点击"修改",出现以下界面:
|
||||

|
||||
|
||||
其中,我们选中"缅甸",然后点"确定":
|
||||

|
||||
|
||||
然后点击底部的"保存"按钮即可。
|
||||
BIN
EdgeUser/web/docs/cdn/waf/deny-countries.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-countries2.png
Normal file
|
After Width: | Height: | Size: 219 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-countries3.png
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-countries4.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-countries5.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
27
EdgeUser/web/docs/cdn/waf/deny-provinces.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 省份封禁
|
||||
|
||||
可以在WAF中设置只允许一组中国省份或者禁止一组省份(直辖市等)访问我们的网站。
|
||||
|
||||
在网站设置 -- "WAF" -- "省份封禁"中可以添加仅允许的省份和仅封禁的省份:
|
||||

|
||||
|
||||
其中:
|
||||
* `仅允许的省份` - 只有所添加的省份才被允许访问我们的网站;
|
||||
* `仅封禁的省份` - 只有所添加的省份才被禁止访问我们的网站,其他没有添加的省份都允许访问我们网站;
|
||||
* 更多选项
|
||||
* `例外URL` - 需要排除的URL,在这里配置的URL将不会触发封禁
|
||||
* `限制URL` - 只有在限制URL列表里的URL才会触发封禁
|
||||
* `提示内容` - 可以设置在用户被封禁时网页上提示的文字,支持完整的HTML(`<html>...</html>`)
|
||||
|
||||
上面的`仅允许的省份`和`仅封禁的省份`同时只会有一个有效,以`仅允许的省份`作为优先。
|
||||
|
||||
## 示例
|
||||
|
||||
### 只允许北京访问
|
||||
可以在"仅允许的省份"中点击"修改",出现以下界面:
|
||||

|
||||
|
||||
然后点"确定":
|
||||

|
||||
|
||||
然后点击底部的"保存"按钮即可。
|
||||
BIN
EdgeUser/web/docs/cdn/waf/deny-provinces.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-provinces2.png
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
EdgeUser/web/docs/cdn/waf/deny-provinces3.png
Normal file
|
After Width: | Height: | Size: 230 KiB |
28
EdgeUser/web/docs/cdn/webp.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WebP
|
||||
在v0.3.2以后,可以设置自动将图片转换为WebP,从而大幅减少带宽的使用。
|
||||
|
||||
## 设置
|
||||
可以在网站"设置" -- "WebP"中设置:
|
||||

|
||||
其中:
|
||||
* `启用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。
|
||||
BIN
EdgeUser/web/docs/cdn/webp1.png
Normal file
|
After Width: | Height: | Size: 293 KiB |
11
EdgeUser/web/docs/cdn/websocket.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Websocket
|
||||
可以在网站"设置" -- "Websocket"里设置是否开启Websocket。
|
||||

|
||||
|
||||
上图中:
|
||||
* 启用Websocket:启用后,网站才会提供Websocket功能;
|
||||
* 允许所有来源域:是否允许所有的来源域(`Origin`),如果选中了,表示允许在所有的域名上访问此Websocket;
|
||||
* 如果没有选中允许所有来源域,则可以设置允许的域名:
|
||||
* 允许的来源域列表:只允许在此列表中的来源域名访问Websocket服务;
|
||||
* 更多选项:
|
||||
* 是否传递请求来源域:选中表示把接收到的请求Header中的`Origin`字段传递到源站。
|
||||
BIN
EdgeUser/web/docs/cdn/websocket1.png
Normal file
|
After Width: | Height: | Size: 211 KiB |
1
EdgeUser/web/docs/index.md
Normal file
@@ -0,0 +1 @@
|
||||
请点击左侧菜单中的帮助内容。
|
||||