Nginx

nginx 配置反向代理在沒有斜線的重定向上失去基本路徑

  • April 26, 2022

我有以下 nginx 配置將 url 路徑重定向到它的透視服務

server {
   listen 80;
   server_name abc.com;
   location = favicon.ico { access_log off; log_not_found off }
   
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection 'upgrade';
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_cache_bypass $http_upgrade;
   

   location /a-ms/ {
      rewrite /a-ms/(.*) /$1 break;
      proxy_pass http:host.docker.internal:3000/;
   }
   
   location /b-ms/ {
      rewrite /b-ms/(.*) /$1 break;
      proxy_pass http:host.docker.internal:4000/;
   }
   
}

使用 nodejs 託管 api 和 swagger doc 的後端微服務

當我從瀏覽器獲得一個 url 時,abc.com/a-ms/doc/它返回正常的招搖,但是當我去沒有斜杠的 url 例如abc.com/a-ms/doc它重定向我到abc.com/doc哪個不是我想要的(它缺少位置路徑)(。我該如何解決這個問題使用 nginx 配置設置?

遵循 RichardSmith 使用proxy_redirect的建議,現在我的位置重定向是正確的並包含位置路徑

location /a-ms/ {
  rewrite /a-ms/(.*) /$1 break;
  proxy_pass http:host.docker.internal:3000/;
  proxy_redirect /doc /a-ms/doc; #add this
}
   
location /b-ms/ {
  rewrite /b-ms/(.*) /$1 break;
  proxy_pass http:host.docker.internal:4000/;
  proxy_redirect /doc /b-ms/doc; #add this
}

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