Nginx
Nginx 正確地重寫一個但不是另一個
基本上,我正在嘗試使用該
proxy_pass
指令來呼叫遠端 API。到目前為止,這是我得到的:
server { location /a { proxy_pass https://a.com; rewrite ^/a(.*)$ $1 break; # no trailing slash, defined in application code } location /b { proxy_pass https://b.com; rewrite ^/b(.*)$ $1 break; # no trailing slash, defined in application code } location / { # Rest of configuration } }
我堅持可以
location /a
正常工作但location /b
由於某種原因不能正常工作的事實(HTTP/404
)。
location /b
我嘗試以這種方式使用斜杠location /b/ { proxy_pass https://b.com/; rewrite ^/b/(.*)$ $1 break; }
但這也不起作用。
非常歡迎任何幫助。
我找到了我的特定問題的答案。
兩個 API 伺服器的配置方式不同,我不得不稍微調整一下 nginx 配置。
- 伺服器
b.com
需要一個proxy_set_header Host $host
指令並且沒有rewrite
指令- 伺服器
a.com
需要rewrite
指令但不需要proxy_set_header Host $host
這給我留下了以下(為我工作)配置:
server { location /a { proxy_pass https://a.com; rewrite ^/a(.*)$ $1 break; } location /b { proxy_set_header Host $host; proxy_pass https://b.com; } }