Рейтинг:0

nginx config reverse proxy lose basepath on redirect without slash

флаг in

i have the following nginx configs to redirect the url path to it's perspective services

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/;
    }
    
}

the backend microservices using nodejs to host the api and swagger doc

When i got to a url from a browser like abc.com/a-ms/doc/ it return the swagger normal, but when i go to url without slash for example abc.com/a-ms/doc it redirected me to abc.com/doc which is not what i wanted(it missing the location path)(. How do i fix this with nginx config settings?

Richard Smith avatar
флаг jp
Вы можете использовать [`proxy_redirect`](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect), чтобы исправить ответ 3xx от вашего приложения.Используйте: `curl -I http://example.com/a-ms/doc`, чтобы определить точное значение заголовка HTTP-ответа `Location`.
Linh Nguyen avatar
флаг in
@RichardSmith я получаю «HTTP / 1.1 301 Moved Permanently» из curl -i , как мне указать значение proxy_redirect?
Richard Smith avatar
флаг jp
Используется `-I` (верхний регистр `I`), чтобы увидеть значение заголовка ответа `Location:`.
Linh Nguyen avatar
флаг in
@RichardSmith, я проверил, это /doc/. Я обновил файл конфигурации nginx с помощью proxy_redirect /doc /a-ms/doc, и теперь он работает. Спасибо!
Рейтинг:0
флаг in

после предложения Ричарда Смита об использовании proxy_redirect и теперь мое перенаправление местоположения правильно и включает путь к местоположению

местоположение /а-мс/ {
   переписать /a-ms/(.*) /$1 break;
   proxy_pass http:host.docker.internal:3000/;
   proxy_redirect /doc /a-ms/doc; #Добавь это
}
    
местоположение / б-мс / {
   переписать /b-ms/(.*) /$1 break;
   proxy_pass http:host.docker.internal:4000/;
   proxy_redirect /doc /b-ms/doc; #Добавь это
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.