在部署docker版本nginx進行請求轉(zhuǎn)發(fā),意外發(fā)現(xiàn)nginx打印日志中的客戶端ip并非為客戶端的真實ip(221.237.xxx.xxx),而是docker虛擬網(wǎng)卡的ip(172.17.0.1)
開始猜測是nginx配置問題,對比其他環(huán)境,發(fā)現(xiàn)配置相同,但其他環(huán)境未出現(xiàn)此情況
通過查詢資料,推測是docker網(wǎng)橋和linux防火墻存在沖突,但是系統(tǒng)的防火墻已經(jīng)關(guān)閉,不知道為啥會有影響。嘗試把docker網(wǎng)橋加入到防火墻的internal區(qū)域,測試一下效果。
1.通過ifconfig -a 找到docker網(wǎng)橋的名稱
2.把網(wǎng)橋加入到防火墻的internal(內(nèi)部)區(qū)域
firewalld-cmd –permanent –zone=internal –change-interface=docker0(網(wǎng)橋名稱)
3.重啟firewalld,我的防火墻已經(jīng)關(guān)閉了,啟動后加上配置又把它關(guān)掉(感覺沒用)
4.再次查詢?nèi)罩景l(fā)現(xiàn)沒有效果。。。
再上網(wǎng)查詢docker和firewalld的沖突問題后,發(fā)現(xiàn)并不是docker和防火墻有沖突,而是docker與防火墻管理工具firewalld有沖突(CentOs 6 中使用iptables來管理防火墻,到了CentOs 7 默認使用firewalld來管理防火墻)。firewalld啟動或者重啟會將iptables的規(guī)則清空,其中就包含docker相關(guān)的規(guī)則
繼續(xù)推測,啟動firewalld時,雖然把docker網(wǎng)橋加入了internal區(qū)域,但同時又將iptables的規(guī)則清空掉了,所以我們添加的配置對于docker來說仍然沒有起作用,這時就需要重啟docker將相關(guān)規(guī)則進行重建。
systemctl restart docker
再次查看日志,成功獲取到客戶端真實ip文章來源:http://www.zghlxwxcb.cn/news/detail-420778.html
以上僅為個人的一些推測,若有錯誤或者其他見解,還請大佬們指正文章來源地址http://www.zghlxwxcb.cn/news/detail-420778.html
到了這里,關(guān)于Docker部署Nginx,無法獲取客戶端真實ip地址的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!