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