Nginx

Nginx 正確地重寫一個但不是另一個

  • August 10, 2021

基本上,我正在嘗試使用該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;
   }
}

引用自:https://serverfault.com/questions/1074064