首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有$remote_addr的Nginx proxy_pass

带有$remote_addr的Nginx proxy_pass
EN

Stack Overflow用户
提问于 2013-07-17 03:48:30
回答 6查看 79.3K关注 0票数 59

我正在尝试在我的proxy_pass上包含$remote_addr或$http_remote_addr,但没有成功。

重写规则起作用

代码语言:javascript
复制
location ^~ /freegeoip/ {  
  rewrite ^ http://freegeoip.net/json/$remote_addr last;
}

不带$remote_addr的proxy_pass可以工作,但freegeoip不能读取x-Real-IP

代码语言:javascript
复制
location ^~ /freegeoip/ {
  proxy_pass http://freegeoip.net/json/;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $host;
}

然后,我将ip添加到请求的末尾,如下所示:

代码语言:javascript
复制
location ^~ /freegeoip/ {
  proxy_pass http://freegeoip.net/json/$remote_addr;
}

但是nginx报告这个错误:没有定义解析器来解析freegeoip.net

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-08 03:33:47

如果proxy_pass语句中没有变量,那么它将在启动或重新加载期间使用"gethostbyaddr“系统调用,并永久缓存该值。

如果有任何变量,例如使用以下任一变量:

代码语言:javascript
复制
set $originaddr http://origin.example.com;
proxy_pass $originaddr;
# or even
proxy_pass http://origin.example.com$request_uri;

然后nginx将使用内置的解析器,并且必须存在" resolver“指令。“解析器”可能用词不当;可以把它理解为“内置解析器将使用什么DNS服务器”。从nginx 1.1.9开始,内置解析器将支持DNS TTL值。在此之前,它使用了5分钟的固定值。

票数 161
EN

Stack Overflow用户

发布于 2013-07-23 17:03:46

nginx无法在运行时而不是配置时解析域名,这似乎有点奇怪(因为域名是硬编码的)。将resolver声明添加到location块通常可以修复运行时遇到的问题。因此,您的位置块可能如下所示:

代码语言:javascript
复制
location ^~ /freegeoip/ {
  #use google as dns
  resolver 8.8.8.8;
  proxy_pass http://freegeoip.net/json/$remote_addr;
}

这个解决方案是基于我前段时间读到的一篇文章- Proxy pass and resolver。值得一读。

票数 71
EN

Stack Overflow用户

发布于 2017-12-25 22:17:32

如果有人遇到麻烦,对我来说,将proxy_pass主机移到一个单独的上游是有帮助的,所以我想出了这样的方法

代码语言:javascript
复制
upstream backend-server {
  server backend.service.consul;
}

server {
  listen       80;
  server_name  frontend.test.me;

  location ~/api(.*)$  {
    proxy_pass http://backend-server$1;
  }
  location / {
    # this works mystically! backend doesn't...
    proxy_pass http://frontend.service.consul/;
  }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17685674

复制
相关文章

相似问题

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