gpt4 book ai didi

NGINX proxy_pass 删除路径前缀并解析 DNS

转载 作者:行者123 更新时间:2023-12-04 04:54:53 47 4
gpt4 key购买 nike

我想使用 proxy_pass 将请求代理到另一台服务器,同时删除匹配的路径前缀。我相信这样做的一种方法如下;

location /a/ {
proxy_pass https://website.com/
}

例如。对 http://localhost/a/b.html 的请求将被代理到 https://website.com/b.html .

据我所知,NGINX 上非商业版本的问题在于 website.com 的 DNS A 记录。将在启动时永远加载和缓存。我已经看到了一种通过使用诸如 $request_uri 之类的变量来解决此问题的技术。在 proxy_pass 指令中,从而迫使 NGINX 根据记录的 TTL 重新解析 DNS。

例如。
location /a/ {
rewrite ^/a/(.*) /$1 break;
proxy_pass https://website.com/$request_uri
}

不幸的是,上面的似乎不起作用,因为它似乎仍然将/a/前缀传递给上游。

基本上我想在这里实现的所有内容是代理请求,同时以这样一种方式删除路径前缀,这样 DNS 记录就不会被永远缓存。

谢谢。

最佳答案

我不确定你在哪里看到它,但只是专门使用 $request_uri当然不会神奇地让 nginx 为你动态解析域名。

也许建议是明确使用变量,例如 $uri (这是一个不同的变量),假设在使用变量时,域名每次都单独解析,没有任何缓存?我不确认或否认这种假设是否正确,但以下至少会摆脱/a为你。

location /a/ {
rewrite ^/a/(.*) /$1 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 被刷新。

关于NGINX proxy_pass 删除路径前缀并解析 DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33218367/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com