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

но это тоже не работает.

Любая помощь очень приветствуется.

0
задан 10 August 2021 в 10:26
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;
    }
}
0
ответ дан 10 August 2021 в 13:50

Теги

Похожие вопросы