仅当流量被代理时,Cloudflare 的 NGINX proxy_pass 才会返回错误

问题描述 投票:0回答:1

我们有几个客户拥有“虚荣 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 配置的问题,但我并不肯定。

nginx cloudflare nginx-reverse-proxy
1个回答
0
投票

因此,在这种情况下,

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/
中找到)。

© www.soinside.com 2019 - 2024. All rights reserved.