Cloudflare > Nginx 反向代理 (NPM) > Digital Ocean 特定问题

Cloudflare > Nginx reverse proxy (NPM) > Digital Ocean specific problem

我遇到了这个非常具体的问题。我会尽力描述交易情况。

我是 运行 Digital Ocean 上 NGINX 反向代理后面的服务器(配置通过 NGINX 代理管理器完成)。 我在我的 cloudflare (mydomain.com) 中创建了指向数字海洋水滴 IP 的 A 记录。 一切正常:

来自互联网的请求 > CLOUDFLARE 代理 > NGINX 反向代理 > 数字海洋服务器。

但是,当我试图在 nginx 反向代理访问列表中放置一个 IP 地址(例如我的 VPN 服务器的地址 X.X.X.X)时(这样只有该 IP 才能访问服务器)。 一切都停止工作,我知道为什么。 Nginx 只等待来自 X.X.X.X 的请求,因为方案看起来是这样的:

X.X.X.X > CLOUDFLARE 代理 > NGINX 反向代理 > 数字海洋服务器

NGINX 没有发送任何响应是合乎逻辑的(因为它正在等待来自 X.X.X.X 的连接并且连接来自 CLOUDFLARES PROXYS IP)

问题是,当我关闭 cloudflare 代理(将小橙色云切换到关闭位置)时,服务器没有响应。据我了解,当我关闭它时,连接应该是这样的:

X.X.X.X > NGINX 反向代理 > 数字海洋服务器

有人知道问题出在哪里吗? (我猜我的 VPN 和 NGINX 代理之间可能还有另一个 cloudflare 服务器?或者我不知道那种东西) 如果您需要任何其他信息,请告诉我,我会尽力提供一切可能的信息。先谢谢大家了。

对于第一种情况(橙色云),您可以配置 NGINX 以恢复访问者的原始 IP (X.X.X.X),因为 Cloudflare 在 HTTP headers 中提供此信息。您可以看到更多信息 in this article 但这里有一个与您的反向代理相关的配置片段:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

#use any of the following two

real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;

Cloudflare IP 范围列表 is maintained here

对于第二种情况(灰色云),听起来 X.X.X.X 和您的 NGINX 之间存在连接问题。您将需要使用诸如 mtr 之类的工具进行诊断,或者还要检查您在 Digitalocean 中是否有任何防火墙设置可能会阻止流量通过您的 Droplet。

如果您考虑采用完全不同的方法私下连接到您的应用程序,我推荐 the following tutorial 作为替代方法。

感谢@Paolo 的解答,问题已解决。我决定从他提供的最简单的案例开始,所以我将所有 cloudflare IP 范围添加到我的 NGINX Revers Proxies 访问列表中。因为我 运行 docker 在那个代理后面,我有几个容器需要 public 和一些需要私有的(只能通过我的 x.x.x.x VPN 访问)

案例 #1(启用橙色云)现在我可以从任何 IP 地址访问我想成为的容器 public(感谢上面提到的新访问列表)

来自互联网的请求 > CLOUDFLARE 代理 > NGINX 反向代理 > 数字海洋服务器 > DOCKER PUBLC 容器

在@Paolo 指出 X.X.X.X 和 NGINX 之间可能存在连接问题后,案例 #2(灰云关闭)我开始检查所有配置。他是对的,反向代理配置错误。解决问题后,一切都按我的计划开始工作。 (在这种情况下,访问列表从以前的列表切换到只允许 X.X.X.X)

X.X.X.X > NGINX 反向代理 > 数字海洋服务器 > DOCKER 私有容器

谢谢大家,特别感谢@Paolo