2017-07-27 45 views
0

我想轉發特定的uri如果匹配到nginx後端。例如轉發匹配的具體位置和代理重定向它在nginx

向前https://www.hostname.com/*/A/B/Chttps://int.hostname.com/*/A/B/C(其中*是從正則表達式填充的變量自動)

當前配置看起來像以下,而且不知道如何上面

location /a/b/c/ { 
    proxy_set_header  Host $proxy_host; 
    proxy_set_header  X-Forwarded-Proto $scheme; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_read_timeout  180m; 

    proxy_pass http://int.hostname.com/v2/e/t/a/b/c; 
    proxy_redirect default; 
} 
+0

爲了澄清,在的情況下URI匹配的「/ */A/B/C」是在發送給內部服務器上的相同的路徑,或者是有一些修改?例如如果有人點擊/ v1/a/b/c,你只是在與內部的/ v1/a/b/c進行交談?或者是「/ v1」部分多少重要 –

+0

@JoshuaDeWald它會一樣的。/v1/a/b/c將被傳遞爲/ v1/a/b/c。類似地,/ sample/v2/a/b/c將作爲/ sample/v2/a/b/c傳遞。 *表示任何路徑。 謝謝 – Err0rr

回答

1

繼續。如果你希望你的位置,匹配以/a/b/c/結尾的URI,您將需要使用正則表達式語法。詳情請參閱this document

proxy_pass語句的URI後綴是可選的。在沒有URI後綴的情況下,原始URI將不加修改地傳遞。詳情請參閱this document

例如:

location ~ /a/b/c/$ { 
    ... 
    proxy_pass http://int.hostname.com; 
    ... 
} 
+0

謝謝我會看看那些文檔。你的意思是我需要在proxy_pass中寫任何東西?實際上,URI可能不以/ a/b/c /結尾。考慮到這一點,如果它不以此結束,應該怎麼辦? – Err0rr

+0

你的意思是'/ a/b/c /'嵌入在URI的任何地方?在這種情況下,刪除終止'$'。 –

+0

是的,就是這樣,它也應該轉發完全相同的後端。如果URI不包含'/ a/b/c /',那麼它不應該將URI轉發到後端。我希望這可以工作。如果還有什麼我應該照顧的請讓我知道。我會測試它。 – Err0rr