Nginx корректно переписывает для одного, но не для другого

Nginx корректно переписывает для одного, но не для другого

По сути, я пытаюсь использовать 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;
    }
}

Связанный контент