60

proxy_pass に $remote_addr または $http_remote_addr を含めようとしていますが、成功しません。

書き換えルールが機能する

location ^~ /freegeoip/ {  
  rewrite ^ http://freegeoip.net/json/$remote_addr last;
}

$remote_addr のない proxy_pass は機能しますが、freegeoip は x-Real-IP を読み取りません

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 を追加します。

location ^~ /freegeoip/ {
  proxy_pass http://freegeoip.net/json/$remote_addr;
}

しかし、nginx はこのエラーを報告します: freegeoip.net を解決するためのリゾルバーが定義されていません

4

6 に答える 6

165

proxy_pass ステートメントに変数が含まれていない場合、起動時またはリロード時に「gethostbyaddr」システム コールが使用され、その値が永続的にキャッシュされます。

次のいずれかを使用するなど、変数がある場合:

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 分の固定値を使用していました。

于 2014-03-07T19:33:47.343 に答える
0

server portでnginx について言及することもできますproxy_pass uri。これで問題は解決しました。

于 2014-12-10T06:19:36.797 に答える