首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGINX proxy_pass移除路径前缀并解析DNS

问NGINX proxy_pass移除路径前缀并解析DNS
EN

Stack Overflow用户
提问于 2015-10-19 23:30:41
回答 1查看 32.2K关注 0票数 18

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

代码语言:javascript
复制
location /a/ {
  proxy_pass https://website.com/
}

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

据我所知,在NGINX上的非商业版本中的问题是,website.com的DNS记录将在启动时永远加载和缓存。我看到了一种技术,可以通过在proxy_pass指令中使用变量来解决这个问题,从而强制NGINX根据记录的TTL重新解析DNS。

例如。

代码语言:javascript
复制
location /a/ {
  rewrite ^/a/(.*) /$1  break;
  proxy_pass https://website.com/$request_uri
}

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

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-25 10:32:56

我不确定你在哪里见过它,但仅仅使用$request_uri肯定不会神奇地让nginx为你动态解析域名。

也许所建议的是显式地使用变量,例如$uri (这是一个不同的变量),假设当使用这些变量时,每次都会单独解析域名,而不需要任何缓存?我不确认或否认这样的假设是否正确,但下面的内容至少会帮你摆脱/a。

代码语言:javascript
复制
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被刷新。

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33218367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档