docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法


docker容器虽然很方便,

但在使用中还是会遇到一些问题,
比如在nginx容器中获取到客户端的IP是172网段的内网地址,
而我们实际是想要得到用户的真实IP。

一、 nginx容器无法获得客户ip的现象

下面子恒老师讲一下具体的情况,
然后再讲nginx容器怎么得到客户真实IP地址,
网络结构如下:

在宿主机中启动了一个nginx容器和一个php容器,
nginx与宿主机使用 443 端口作映射,
当客户端访问php脚本时,
nginx会转发给上游的phh容器处理。

这里的nginx容器日志中,php容器获取到的客户IP,
都是172开头的IP地址。

二、 nginx容器获取用户真实IP思路

解决这个问题的关键是:把docker网桥加入到防火墙的internal区域

三、 nginx容器,php容器得到客户端IP操作

下面以centos7系统为例,
讲解下怎么实现docker容器获取用户实际IP

3.1 查询你docker容器中网桥名称

ifconfig
br-815da7XXXXXX: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.19.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:efff:XXXX:XXXX prefixlen 64 scopeid 0x20<link> ether 02:42:ef:XX:XX:XX txqueuelen 0 (Ethernet) RX packets 1187 bytes 166115 (162.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1688 bytes 159136 (155.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用ifconfig命令,
类似br-815da7XXXXXX这就是docker容器的网桥名称

3.2 把网桥加入到防火墙的internal(内部)区域

firewall-cmd --permanent --zone=internal --change-interface=br-815da7XXXXXX

3.3 重启防火墙

systemctl firewalld

这样当用户再次访问你的nginx容器,php容器时,
就能获取到对方的真实IP了。

转载:https://www.qinziheng.com/nginx/8928.htm


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM