Nginx proxy_pass with $remote_addr

后端 未结 4 975
时光说笑
时光说笑 2020-12-23 13:43

I\'m trying to include $remote_addr or $http_remote_addr on my proxy_pass without success.

The rewrite rule works

location ^~ /freegeoip/ {  
  rewri         


        
相关标签:
4条回答
  • 2020-12-23 14:00

    If the proxy_pass statement has no variables in it, then it will use the "gethostbyaddr" system call during start-up or reload and will cache that value permanently.

    if there are any variables, such as using either of the following:

    set $originaddr http://origin.example.com;
    proxy_pass $originaddr;
    # or even
    proxy_pass http://origin.example.com$request_uri;
    

    Then nginx will use a built-in resolver, and the "resolver" directive must be present. "resolver" is probably a misnomer; think of it as "what DNS server will the built-in resolver use". Since nginx 1.1.9 the built-in resolver will honour DNS TTL values. Before then it used a fixed value of 5 minutes.

    0 讨论(0)
  • 2020-12-23 14:16

    It seems a bit strange that nginx is failing to resolve the domain name at runtime rather than at configuration time (since the domain name is hard coded). Adding a resolver declaration to the location block usually fixes dns issues experienced at runtime. So your location block might look like:

    location ^~ /freegeoip/ {
      #use google as dns
      resolver 8.8.8.8;
      proxy_pass http://freegeoip.net/json/$remote_addr;
    }
    

    This solution is based on an article I read a while back - Proxy pass and resolver. Would be worth a read.

    0 讨论(0)
  • 2020-12-23 14:22

    If anyone is stll experiencing trouble, for me it helped to move the proxy_pass host to a seperate upstream, so I come up with something like this

    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/;
      }
    }
    
    0 讨论(0)
  • 2020-12-23 14:24

    You could also mention your nginx server port in the proxy_pass uri. This solved the issue for me.

    0 讨论(0)
提交回复
热议问题