![Nginx 可以正確重寫其中一個,但無法正確重寫另一個](https://rvso.com/image/769276/Nginx%20%E5%8F%AF%E4%BB%A5%E6%AD%A3%E7%A2%BA%E9%87%8D%E5%AF%AB%E5%85%B6%E4%B8%AD%E4%B8%80%E5%80%8B%EF%BC%8C%E4%BD%86%E7%84%A1%E6%B3%95%E6%AD%A3%E7%A2%BA%E9%87%8D%E5%AF%AB%E5%8F%A6%E4%B8%80%E5%80%8B.png)
基本上,我嘗試使用該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;
}
但這也行不通。
非常歡迎任何幫助。
答案1
我找到了我的特定問題的答案。
兩個 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;
}
}