分享主题:linux,nginx,php,mysql

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

nginx 0评论 现在加入小程序俱乐部QQ群:483987340

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

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

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

docker 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了。

猛击这里
观看子恒老师《0基础安装nginx web服务器》系列视频
了解实现过程和下载相关源代码

声明:本文仅供交流学习 , 版权归属原作者,部分文章未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知QQ:58842997,我们会及时删除。
秦子恒公众号

来源:秦子恒博客,欢迎转载分享,请保留出处

docker nginx获取客户端真实IP,nginx容器,php容器获取客户ip是172内网地址解决方法链接:https://www.qinziheng.com/nginx/8928.htm

现在就加入微信开发QQ群2:483987340,跟同行探讨微信公众平台开发。群满就关闭,你得等到下一个群开通才能加入……

喜欢 (3)