2016-09-09 98 views
1

我已經嘗試了幾件事情來完成這件事。即使爲每個端口/客戶端寫一個新的服務器塊。

我忙於啓動一個應用程序,用戶可以租用n小時,因爲每個實例都在它自己的端口上啓動,我想給用戶一個將它們轉發到它們自己的應用程序實例的url例如基於端口號。

我現在有什麼,只是爲了測試

location /go/ { 
    proxy_pass http://127.0.0.1:5000/; 
    proxy_redirect off; 
} 

location /go/5001/ { 
    proxy_pass http://127.0.0.1:5001/; 
    proxy_redirect off; 
} 


location ^~ /status/ { 
    proxy_pass http://127.0.0.1:5000/status; 
    proxy_redirect off; 
} 

我想什麼來實現的,該變種被傳遞(例如5006)被傳遞到proxy_pass端口。另外,對於每個實例,我想要一個/ status /來查看狀態(並且我應該使用end /?..我沒有使用它,但有時它的加載路徑包括結尾/,有時它甚至會替換url到127.0.0.1:port,有時不加載CSS /圖像/ JS。

location /go/$VAR/ { 
    proxy_pass http://127.0.0.1:$VAR/; 
    proxy_redirect off; 
} 


location /go/$VAR/status/ { 
    proxy_pass http://127.0.0.1:$VAR/status; 
    proxy_redirect off; 
} 

很多感謝!

回答

0

如果您需要從URI捕獲端口,並在proxy_pass使用聲明,您可以使用具有指定捕獲的正則表達式位置。

例如(我沒有測試過這個):

location ~ ^/go/(?<myport>\d+)(?<myuri>/.*)$ { 
    rewrite^$myuri break; 
    proxy_pass http://127.0.0.1:$myport; 
    ... 
} 
+0

謝謝!明天早上我會試試這件事。有些東西告訴我這是正確的模式。會讓你知道它是否工作。再次感謝! – ultrafunkamsterdam

+0

Awsome!工作幾乎完美。我期待很長時間。謝謝! 唯一的事情是,我可以訪問通過/進入/ 5001 /但不通過/去/應用5001 而像/去/ 5001 /狀態子目錄只能訪問,無需你的答案再次 感謝結束斜線!它已經爲我節省了很多額外的麻煩 – ultrafunkamsterdam