我们有几个客户拥有“虚荣 URL”,将他们的
vanity-url.com
DNS 别名记录到我们的 real-url.com
。最近,我们已指示所有虚荣 URL 持有者更改其记录,以指向我们的新 Cloudflare 端点,以获得更好的 DDoS 保护。子域一切正常,但许多 DNS 提供商不允许您在顶点/根处放置 CNAME,因为它会破坏 RFC。
为了解决这个问题,我想设置一个简单的 Nginx 服务器,使用
proxy_pass
将流量传递到 Cloudflare,但我遇到了问题。当我有一个使用以下配置运行的 Nginx 服务器时,它可以在 CF 端点处于“仅 DNS”模式时工作,但是一旦我启用 CF 代理,它就会返回 403 Forbidden,然后最终返回 421 Misdirected Request 代码。
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
server_name vanity-url.com;
ssl_certificate vanity-url.com.crt;
ssl_certificate_key vanity-url.com.key;
listen 443 ssl;
location / {
proxy_pass https://cloudflare.real-url.com;
proxy_set_header Host $host;
proxy_ssl_server_name on;
}
}
}
我有一个 CF“自定义主机名”,已添加正确的证书和密钥,因此它应该正确执行 SSL 终止。我认为这是 CF 配置的问题,但我并不肯定。
因此,在这种情况下,
Cloudflare
不知道请求来自什么——客户端、服务器还是代理。您可以在代理中添加一些额外的标头,以便让 Cloudflare
知道您是代理:
location / {
proxy_pass https://cloudflare.real-url.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
此处需要注意的另一件事是,您的代理服务器具有
SSL
证书并接受端口 443
上的流量。确保您的 Claoudflare SSL 模式设置为 Full (strict)
。
如果这不起作用,我会首先检查所有服务器上的
firewall
配置,但最重要的是在 Cloudflare 服务器上 - 看看它是否不会阻止来自代理的请求。
然后我只需筛选日志(访问和错误日志通常可以在 /var/log/
中找到)。