Назад | Перейти на главную страницу

nginx proxy_pass возвращает одно и то же содержимое для всех запросов

У меня есть система proxy_pass в кучу ресурсов AWS, и поэтому IP-адреса все время меняются. В попытке не перезагружать nginx постоянно, я перемещаю proxy_pass для использования переменной (которая частично работает)

Исходный блок:

location /folder/ {
    proxy_pass https://folder.site.com:8888/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_hide_header X-Frame-Options;
}

Новый блок:

location /folder/ {
    resolver 172.19.0.190;
    set $folder_url https://folder.site.com:8888/;
    proxy_pass $folder_url;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_hide_header X-Frame-Options;
}

Он отлично работает при разрешении сайта. Это HTML-файл, который загружает файлы CSS и JS. Моя проблема в том, что все 3 файла имеют одинаковое содержимое, которое является содержимым HTML.

Я должен упустить что-то глупое, но хоть убей, я не могу этого понять.

Когда в proxy_pass используются переменные, если в директиве указан URI, он передается на сервер как есть, заменяя исходный URI запроса. Видеть этот документ для подробностей.

Вы указали URI как / в $folder_url переменная, поэтому любой URI (например, /folder/foo) переводится на / перед прохождением вверх по течению.

Ваш исходный блок переведет /folder/foo к /foo перед тем, как передать его вверх по течению.

Вы можете использовать регулярное выражение location блок для захвата части URI, которая будет отправлена ​​в восходящем направлении, например:

location ~ ^/folder/(.*)$ {
    resolver 172.19.0.190;
    set $folder_url https://folder.site.com:8888/$1;
    proxy_pass $folder_url;
    ...
}

Обратите внимание, что порядок регулярного выражения location блоков имеет значение. Видеть этот документ для подробностей.