docker中nginx的location轉(zhuǎn)發(fā)不生效的解決
nginx的location轉(zhuǎn)發(fā)不生效
問題
docker創(chuàng)建nginx容器后,修改nginx.conf配置服務轉(zhuǎn)發(fā),始終不成功,proxy_pass配置如下
解決辦法
需將上圖中的localhost改為容器內(nèi)查看到的宿主ip;
因為初始的nginx容器內(nèi)無ping命令,所以需要安裝,先執(zhí)行docker exec -it <容器ID> /bin/bash
進入nginx容器,然后執(zhí)行apt-get update
,然后執(zhí)行apt-get install inetutils-ping
安裝工具,最后執(zhí)行ping host.docker.internal
查看宿主ip,如下圖
最終,將localhost改為宿主ip,重啟容器,即可成功轉(zhuǎn)發(fā)服務
nginx代理轉(zhuǎn)發(fā)location配置的坑
坑了一下午的時間
述求
配置 http://xxx/api/xxx
轉(zhuǎn)發(fā)到 http://xxx:8080/xxx
端口地址
原有的配置
location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8080; }
遇到的問題
轉(zhuǎn)發(fā)的地址是 http://xxx:8080/api/xxx
,里面還是帶有/api,不符合我們的要求
接下來嘗試修改為
location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8080/; }
修改之后轉(zhuǎn)發(fā)的地址變?yōu)?http://xxx:8080//xxx
會存在 //
的情況
接下來修改為
location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:8080/; }
就正確了, http://xxx:8080/xxx
查閱了網(wǎng)絡,還有一種修改的方式,使用rewrite,但是這個屬于重定向,并不符合我們的要求
location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; rewrite ^/api/(.*) http://localhost:8080/$1; }
但是上述方式如果和upStream進行聯(lián)合使用的話,會導致無法解析upstream里面的內(nèi)容
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker+Jenkins+Gitee自動化部署maven項目的實現(xiàn)
本文主要介紹了Docker+Jenkins+Gitee自動化部署maven項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06詳解docker鏡像centos7配置Java運行環(huán)境
基于docker官網(wǎng)centos7鏡像配置java運行環(huán)境,自己安裝jdk和tomcat,解決docker容器與宿主機時間不一致問題2017-05-05