我正在使用nginx爲可能位於防火牆後面的Web應用創建反向代理。對於我最初的概念證明,我使用了下面的位置塊來確保它的工作。使用nginx正則表達式位置匹配將URI的動態映射到多個反向代理的不同端口
location/{
proxy_pass https://localhost:2222;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
我在我的網絡應用程序ssh -f -N -T -R2222:localhost:443 [email protected]
上打開我的反向隧道。 這與我喜歡的完全相同。我型我nginx-ip
到我的瀏覽器,我得到的HTTPS流量從我的web應用程序,但由nginx-ip
模糊等
我想允許潛在的幾千反向隧道雖然跨越幾千年的端口(而不是隻2222在上述情況下)。閱讀nginx,以動態使用包含端口號的URI到該特定端口的proxy_pass。
也就是說,我想https://nginx-ip/2222/
到proxy_pass https://localhost:2222;
,我想https://nginx-ip/1111/
到proxy_pass https://localhost:1111;
。
我已經嘗試了不少變化,但據我已經能夠理性,我降落在想這應該工作:
location ~* ^/(\d+) {
proxy_pass https://localhost:$1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
事實並非如此。我在我的瀏覽器中得到一個502錯誤的網關,錯誤日誌給我:
2016/05/31 21:02:36 [error] 6188#0:* 3584沒有解析器定義來解析localhost,client: {我的客戶端-IP},服務器:localhost,請求: 「GET/2222/HTTP/1.1」,主持人: 「{nginx的-IP}」
當我使用的127.0.0.1
代替localhost
我得到一個404 。網頁上說
找不到 在此服務器上找不到請求的URL/2222 /。
是我試圖用nginx配置可能嗎?
重申,我希望能夠通過nginx Web服務器啓動許多(數千個)獨特的反向隧道。我最初的想法是根據我想要代理的其他Web應用程序來改變nginx服務器的傳出端口,並通過URI中的端口將請求分配給我的nginx服務器到不同的端口(通過正則表達式提取它) 。
404錯誤來自後端服務器(打開'ssh'隧道的那個)?如果是這樣,你可能需要添加一個[在這個答案中的URL重寫規則](http://serverfault.com/a/379679/123520)來刪除'/ 2222'。 – Cirdec
哦!是的!起初我沒有意識到這一點。謝謝! – 0xtobit
注意:[這個問題](http://stackoverflow.com/questions/25106424/nginx-proxy-redirection-with-port-from-uri)非常相似。 – 0xtobit