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.