nginx 設定反向代理程式在沒有斜線的重新導向上遺失基本路徑

nginx 設定反向代理程式在沒有斜線的重新導向上遺失基本路徑

我有以下 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 文件的後端微服務

當我從瀏覽器訪問一個網址時,abc.com/a-ms/doc/它會返回正常的樣子,但是當我轉到不帶斜杠的網址時,abc.com/a-ms/doc它會將我重定向到abc.com/doc不是我想要的位置(它缺少位置路徑)( 。

答案1

遵循理查德史密斯的建議使用代理重定向現在我的位置重定向是正確的並且包含位置路徑

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
}

相關內容