У меня есть система 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
блоков имеет значение. Видеть этот документ для подробностей.