diff --git a/src/content/install/reverse-proxy.mdx b/src/content/install/reverse-proxy.mdx index 39e2770..fed9ba5 100644 --- a/src/content/install/reverse-proxy.mdx +++ b/src/content/install/reverse-proxy.mdx @@ -108,14 +108,45 @@ Cloudflare 免费版那 100 MB 的上传上限也就不是天花板了,单个 hub 取 `X-Forwarded-For` 的最后一跳,且只在 peer 本身是本地地址时才采信。上面两种反代都是追加 而不是覆盖,所以链尾才是代理真正看到的地址。 -本地反代前面再套一层 CDN 时,链尾是边缘的地址:所有访客共用一个限流桶, -面板上 NAT 节点显示的出口是边缘的地址,网卡上没有公网地址的节点,国家码也按边缘算。那种部署要让边缘自己写客户端地址 -(Cloudflare 的 `CF-Connecting-IP`),再由本地反代覆盖 `X-Forwarded-For`: +前面是 Cloudflare 的(域名开了代理,或者走隧道),节点的出口地址和国家码不用额外配置:hub 在验过节点 +token 的 agent 连接上读 Cloudflare 写的 `CF-Connecting-IP`。登录限流不读这个头:能从 Cloudflare 网络 +连到源站的不只 Cloudflare 的代理,Worker 也可以,这个头能被伪造。所以域名开了代理时,限流仍按边缘的 +地址计,同一个边缘后面的访客共用一个桶。 + +本地反代前面是别家 CDN,或者隧道先到本机的 nginx 再到 hub 时,链尾是边缘或隧道的地址,所有访客共用 +一个限流桶;别家 CDN 后面,NAT 节点显示的出口、网卡上没有公网地址的节点的国家码也按边缘算。在反代上 +把边缘换回访客地址,只信任列出的网段: ```nginx -proxy_set_header X-Forwarded-For $http_cf_connecting_ip; +# 写在 server 里。每个回源网段一行,照 CDN 公布的列表填;隧道在本机时填 127.0.0.1 +set_real_ip_from 192.0.2.0/24; +real_ip_header X-Forwarded-For; +real_ip_recursive on; +``` + +这要求 nginx 带 realip 模块,`nginx -V 2>&1 | grep realip` 有输出就有。caddy 的写法: + +```caddyfile +{ + servers { + trusted_proxies static 192.0.2.0/24 + trusted_proxies_strict + } +} + +hub.example.com { + reverse_proxy 127.0.0.1:28080 { + header_up X-Forwarded-For {client_ip} + } +} ``` + + 以前照这一页写过 `proxy_set_header X-Forwarded-For $http_cf_connecting_ip;` 的,删掉这一行。 + 有人绕过 Cloudflare 直连源站时,这个头由他自己填:换着值试密码,登录限流就拦不住;填上你的地址, + 你就被锁在登录页外 15 分钟。 + + ### 4. 放行 `POST` / `PUT` / `DELETE` 面板的写操作用到这三个方法。有些默认只放行 `GET` / `HEAD` 的 WAF 规则会把整个后台变成只读。 diff --git a/src/content/reference/faq.mdx b/src/content/reference/faq.mdx index 759f932..b6671ba 100644 --- a/src/content/reference/faq.mdx +++ b/src/content/reference/faq.mdx @@ -87,6 +87,8 @@ IPv6、出口。机器自己的地址优先,因为出口可能属于挡在它 - 网关做了分流或透明代理:去 hub 的连接从代理出去,出口是代理的。节点没有公网 IPv6 的话,国家码也只能按代理出口算 - hub 只有 IPv6 入口:没有 IPv4 连接,NAT 节点的公网 IPv4 无从得知 +- hub 前面套了 Cloudflare 以外的 CDN:出口是 CDN 边缘的地址,按[反向代理](/install/reverse-proxy)里的 + realip 配置把访客地址换回来。Cloudflare 不用配,hub 读它写给节点连接的 `CF-Connecting-IP` - 一台机器有多个公网地址,想显示指定的那个 手动填的值会一直显示,IP 变了要自己改。手动填的 IP 只影响显示,不影响国家码。