下面文章小编就为大家带来一篇讲docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法。小编觉得挺不错的,现在就分享给大家,如果你在找php容器客户端ip,php容器用户ip,nginx容器客户端IP,也可以做个学习。一起跟随小编过来看看吧。
docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法
作者:小程序爱好者 发布时间:2020-03-07
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容器获取用户实际IP3.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了。
猛击这里,
观看子恒老师《0基础安装nginx web服务器》系列视频
了解实现过程和下载相关源代码
声明:部分文章或图片未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知QQ:2334512685,我们会及时删除。
发布:秦子恒博客,欢迎转载分享,请保留出处。
docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法链接:https://www.qinziheng.com/details/8928/
docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法相关文章