簡體   English   中英

無法配置 nginx 位置(使用重寫)?

[英]Can't configure nginx location(use rewrite)?

我有一台運行 nginx 的服務器,可以通過端口 80 訪問 Internet。假設我的服務器的外部 IP 地址是 8.41.37.217,我有一個域 srv.vvzvlad.xyz,它指向這個因此,當我在瀏覽器中打開 h[tt]p://srv.vvzvlad.xyz 時,我會看到 nginx 歡迎頁面。 到目前為止,一切正常。

我在服務器上運行了 docker,其中一些容器實現了 web 應用程序。 docker 容器內部的這些應用程序打開端口 80,而容器外部(來自內部網絡)這些端口可用作 3333 或 4444 或類似端口。 因此,通過在瀏覽器中使用端口 3333 打開本地服務器地址(192.168.88.111),我訪問了運行 wiki 的 docker 容器的端口:h[tt]p://192.168.88.111:3333 重定向到 10.0 .0.2:80,其中 10.0.0.2 是 docker 容器的內部地址。 這也有效。

現在我想從 Internet 訪問這些 docker 容器。 我可以只打開路由器上的端口,並打開 go 到 h[tt]p://srv.vvzvlad.xyz:3333 之類的地址,但是一些發送請求的軟件不知道如何處理 80/443 以外的端口. 這就是為什么我在 nginx 上設置了一些位置(見第一段),這些位置將諸如 h[tt]p://srv.vvzvlad.xyz(:80)/wiki 之類的 URL 重定向到 h[tt]p://192.168.88.111 :3333。

我這樣做:

server {
    listen 80;
...
    location /wiki {
        proxy_pass h[tt]p://192.168.88.111:3333;
    }
...
}

我剛才描述的網絡結構看起來像這樣: https://habrastorage.org/webt/ud/va/8p/udva8p6ggl_ojb3cde-yessdnmk.png

此方案有效,但添加到應用程序“/wiki”內的任何地址。 因此,應用程序的地址是 h[tt]p://srv.vvzvlad.xyz/wiki/index 中的 h[tt]p://192.168.88.111:3333/index。 對於某些應用程序,這可以正常工作。 但有些應用程序希望在 web 服務器的根目錄中獨占運行。 它們可以直接使用地址 h[tt]p://srv.vvzvlad.xyz (h[tt]p://srv.vvzvlad.xyz/index),但不能使用添加的地址 (h[tt] p://srv.vvzvlad.xyz/wiki/index),因為他們仍然在內部使用指向其資源的絕對鏈接,例如 h[tt]p://srv.vvzvlad.xyz/favicon.png,這當然不在“位置 /”,但僅限於“位置 /wiki”。

我該如何解決這個問題? 我試過使用重寫(例如“rewrite ^/wiki/(.*)$ h[tt]p://192.168.88.111:3000/$1;”),但應用程序請求的資源仍然沒有/wiki: https://habrastorage.org/webt/zj/s4/oa/zjs4oazs7ywo10c_zffxs8pkpnw.png

對兩者都使用斜杠應該對大多數人都有幫助。 否則玩斜線..總是很痛苦..

 location /wiki/ {
        proxy_pass http://192.168.88.111:3333/;

/wiki 正在對所有術語 wiki* 進行正則表達式

還有一種可能:

 location ~* /wiki/(.*)$ {
        proxy_pass http://192.168.88.111:3333/$1;

如果之后您無法在瀏覽器中訪問 /wiki(沒有斜杠):

 location /wiki {
        return 308 http://$host/wiki/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM