Проксирование Nginx не работает, возвращает ошибку 400

#nginx #reverse-proxy

#nginx #обратный прокси-сервер

Вопрос:

Итак, у меня есть файл, доступный для моих сайтов, настроенный следующим образом:

 location / {
    proxy_pass http://localhost:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
location /legacy/ {
    proxy_pass https://my.domain.com/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host https://my.domain.com/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
 }
  

Однако всякий раз, когда я захожу в my.domain.com/leagcy / Я получаю сообщение об ошибке 400 напрямую обратно, и перенаправление или проксирование не происходит. Есть идеи относительно того, что я сделал неправильно?

Комментарии:

1. Попробуйте удалить proxy_set_header Host https://my.domain.com/;

2. похоже, это сработало частично, теперь, похоже, как бы меняет прокси, но все относительные ссылки имеют значение 404

3. и когда я пытаюсь попасть в конечную точку API, я все равно получаю 400

Ответ №1:

Вероятно, вы используете регулярные выражения в server_name и отправляете запросы, не устанавливая Host для заголовка какое-либо значение.

$host переменная содержит в этом порядке приоритета: имя хоста из строки запроса, или имя хоста из поля заголовка запроса ‘Host’, или имя сервера, соответствующее запросу

Что приводит Host к отправке недопустимого заголовка в восходящий поток.