NGINX proxy_pass 删除路径前缀并解析 DNS
NGINX proxy_pass remove path prefix & resolve DNS
我想使用 proxy_pass 将请求代理到另一台服务器,同时删除匹配的路径前缀。我相信这样做的一种方法如下;
location /a/ {
proxy_pass https://website.com/
}
例如对 http://localhost/a/b.html
的请求将被代理到 https://website.com/b.html
.
据我所知,在 NGINX 的非商业版本中存在的问题是 website.com
的 DNS A 记录将在启动时永久加载和缓存。我已经看到一种技术可以通过在 proxy_pass 指令中使用诸如 $request_uri
的变量来解决此问题,从而强制 NGINX 根据记录的 TTL 重新解析 DNS。
例如
location /a/ {
rewrite ^/a/(.*) / break;
proxy_pass https://website.com/$request_uri
}
不幸的是,上面的方法似乎不起作用,因为它似乎仍然将 /a/ 前缀传递给上游。
基本上我想在这里实现的是代理请求,同时删除路径前缀,这样 DNS 记录就不会永远缓存。
谢谢。
我不确定你在哪里见过它,但只是专门使用 $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
? As explained in http://nginx.org/en/docs/beginners_guide.html#control and http://nginx.org/en/docs/control.html#reconfiguration,nginx 在重新加载期间从不停止处理任何请求,因此这应该是一个安全的操作;而且它很可能也会导致 DNS 被刷新。
我想使用 proxy_pass 将请求代理到另一台服务器,同时删除匹配的路径前缀。我相信这样做的一种方法如下;
location /a/ {
proxy_pass https://website.com/
}
例如对 http://localhost/a/b.html
的请求将被代理到 https://website.com/b.html
.
据我所知,在 NGINX 的非商业版本中存在的问题是 website.com
的 DNS A 记录将在启动时永久加载和缓存。我已经看到一种技术可以通过在 proxy_pass 指令中使用诸如 $request_uri
的变量来解决此问题,从而强制 NGINX 根据记录的 TTL 重新解析 DNS。
例如
location /a/ {
rewrite ^/a/(.*) / break;
proxy_pass https://website.com/$request_uri
}
不幸的是,上面的方法似乎不起作用,因为它似乎仍然将 /a/ 前缀传递给上游。
基本上我想在这里实现的是代理请求,同时删除路径前缀,这样 DNS 记录就不会永远缓存。
谢谢。
我不确定你在哪里见过它,但只是专门使用 $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
? As explained in http://nginx.org/en/docs/beginners_guide.html#control and http://nginx.org/en/docs/control.html#reconfiguration,nginx 在重新加载期间从不停止处理任何请求,因此这应该是一个安全的操作;而且它很可能也会导致 DNS 被刷新。