Nginx proxy pass удалить префикс пути и разрешить DNS
Я хотел бы прокси-запрос на другой сервер с помощью proxy_pass при удалении сопоставленного префикса пути. Я считаю, что один из способов сделать это следующим образом:
location /a/ {
proxy_pass https://website.com/
}
Е. Г. запрос http://localhost/a/b.html
будет перенаправлен на https://website.com/b.html
.
насколько мне известно, проблема с этим в некоммерческих версиях на NGINX заключается в том, что DNS-запись для website.com
будет загружен и кэширован навсегда при запуске. Я видел технику, чтобы обойти это, используя переменную, такую как $request_uri
в директиве proxy_pass, тем самым заставляя NGINX повторно разрешать DNS в соответствии с TTL записи.
Э. Г.
location /a/ {
rewrite ^/a/(.*) / break;
proxy_pass https://website.com/$request_uri
}
к сожалению, кажется, что выше не работает, поскольку он, похоже, все еще передает префикс /a/ вверх по течению.
по сути, все, что я хочу достичь здесь, это прокси-запрос при удалении префикса пути таким образом, чтобы записи DNS не кэшировались навсегда.
спасибо.
1 ответов
Я не уверен, где вы его видели, но просто с помощью специально $request_uri
конечно, не собирается волшебным образом заставлять nginx динамически разрешать доменные имена для вас.
возможно, то, что было предложено, явно использовало переменные, такие как $uri
(который является другой переменной), исходя из предположения, что когда переменные используются, то доменное имя каждый раз решается индивидуально, без какого-либо кэширования? Я не подтверждаю и не отрицаю правильности такого предположения, но следующие по крайней мере избавятся от /a
для вас.
location /a/ {
rewrite ^/a/(.*) / break;
proxy_pass https://website.com/$uri$is_args$args;
}
(обратите внимание, что если он действительно реализован не для кэширования доменного имени, то вы также можете запустить локальный распознаватель, в противном случае дополнительная задержка и время простоя DNS вашего хостинг-провайдера немедленно повлияет на ваш сайт, не говоря уже о возможных ограничениях запросов DNS их серверов.)
возможно, лучшим решением было бы периодически перезапускать nginx, чтобы автоматически забрать изменения в DNS? Е. Г., nginx -s reload
или kill -HUP
? Как объясняется в http://nginx.org/en/docs/beginners_guide.html#control и http://nginx.org/en/docs/control.html#reconfiguration, nginx никогда не прекращает обработку запросов во время перезагрузки, поэтому это должна быть безопасная операция; и это, скорее всего, приведет к сбросу DNS.