nginx反向代理,並加上一個目錄
天蓬老师
天蓬老师 2017-05-16 17:21:03
0
2
375

例如我想透過127.0.0.1/play/ 存取127.0.0.1:9000
我現在的設定是這樣:

location / {
        root   F:\Personal\ck;
        index  index.html;
}
location ~ ^/play/ {
        proxy_pass   http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
}

當我實際訪問時127.0.0.1/play/時,它卻訪問了127.0.0.1:9000/play/ 我很疑惑,沒什麼沒有直接訪問9000端口,而是在後面帶上了目錄名呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
阿神

因為你請求了 /play/ 而這個請求給pass到了 http://127.0.0.1:9000. 這個請求的path同樣也會pass過去。

你想要的可以實現,

location ~ ^/play(/?)(.*){
    proxy_pass http://127.0.0.1:9000/$;
}

這個程式碼的意思是,把 /play/xx 的請求 給我pass 到 http://127.0.0.1:9000/xx

更好的方式

location /play {
        proxy_pass   http://127.0.0.1:9000/;
}

注意結尾的'/'

看這裡
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

滿天的星座

因為proxy_pass只是反向代理,沒辦法重寫URL規則,它只是修改主機名稱而已。
想去掉後面的東西,你得用rewrite

location ~^/play/ {
    proxy_pass    http://127.0.0.1:9000;
    rewrite       "^/play(.*)$"  break;
    ...
    }
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!