Docker中的NGINX在$remote_addr中显示错误的IP

c8ib6hqw  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(86)

在Synology-NAS上,我让Docker中的NGINX将请求转发到服务。
这些服务也在Docker中运行。
昨天,我想利用fail 2ban,发现错误的IP在观看服务日志。
在检查NGINX日志后,我注意到记录的IP不是真实的外部/访问者IP:

172.28.0.1 - - [31/Dec/2023:12:48:04 +0000] "POST /accounts/login/?next=/ HTTP/2.0" 200 8170 "https://service.domain.de/accounts/login/?next=/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" "-"

字符串
这里显示的每个IP都是172.28.0.1-不管我连接到什么服务。因此,看起来NGINX是问题所在。但为什么?

我的设置:

Synology NAS在我的路由器后面运行,并通过路由器转发80/443。端口80/443在Synology NAS防火墙中打开,并点击NGINX-Container Port配置:

0.0.0.0:443 -> 443/tcp
0.0.0.0:80 -> 80/tcp

我运行的NGINX容器的网络配置显示:

Connection to Network "paperless_services":
IP 192.168.144.10 / Gateway 192.168.144.1

Connection to Network "nginx1:":
Container-IP 172.28.0.2 / Gateway 172.28.0.1


(Docker-Network“nginx 1:“由所有服务容器用于通信。

我运行的SERVICE容器(无纸化)的网络配置显示:

Connection to Network "paperless_services:":
Container-IP 192.168.144.5 / Gateway 192.168.144.1


我在这里发现了一些问题,在同一个方向,但我找不到解决方案。我做的任何事情:请仅显示IP 172.28.0.1
我希望有人能帮助我:-)

6kkfgxo0

6kkfgxo01#

好吧,坏消息…
我在找那个问题。
问题是,我的NGINX运行在一个通过桥接网络连接到世界的docker-container中。因此,NAT在NGINX处理传入请求之前发生。结果,网关的IP($REMOTE_ADDR)被桥接网关替换并丢失。
上面的链接展示了一些如何解决这个问题的想法。但没有一个是简单的或“完美”的解决方案。最好是在只连接到主机网络的docker中运行NGINX(但你不能同时连接到主机网络和桥接网络!!)或者在另一个设备上运行NGINX(裸机/没有docker)。
有时候,生活是不公平的:

相关问题