12

コントローラーのIPアドレスを確認します

request.env['REMOTE_ADDR']

これは私のテスト環境では問題なく動作します。しかし、nginx + unicorn を使用した運用サーバーでは、常に127.0.0.1.

これは、サイトの私の nginx 構成です。

  upstream unicorn {
  server unix:/tmp/unicorn.urlshorter.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  # server_name example.com;
  root /home/deployer/apps/urlshorter/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
4

5 に答える 5

17

私もこれに苦労しました。この質問を見つけましたが、他の回答は役に立ちませんでした。

Rails 3.2.8 の Rack::Request#ip の実装を調べて、何を言うべきかをどのように決定したかを確認しました。ローカルネットワークからアドレスを除外せずに環境を介して渡されたアドレスを使用するようにするには(中間プロキシを除外しようとしていますが、それは私が望んでいたことではありません)、さらにnginxプロキシ構成ブロックからHTTP_CLIENT_IPを設定する必要がありましたあなたが上に持っているものに(これが機能するにはX-Forwarded-Forもそこにある必要があります!):

proxy_set_header CLIENT_IP $remote_addr;
于 2012-09-14T22:35:57.920 に答える
4

ELB - nginx - このガイドに従う必要があるレールの場合:

http://engineering.blopboard.com/resolving-real-client-ip-with-amazon-elb-nginx-and-php-fpm

見る:

server {
   listen 443 ssl spdy proxy_protocol;

   set_real_ip_from 10.0.0.0/8;
   real_ip_header proxy_protocol;

  location /xxx {
    proxy_http_version 1.1;
    proxy_pass <api-endpoint>;
    proxy_set_header      Host              $http_host;
    proxy_set_header      X-Forwarded-By    $server_addr:$server_port;
    proxy_set_header      X-Forwarded-For   $remote_addr;
    proxy_set_header      X-Forwarded-Proto $scheme;
    proxy_set_header      X-Real-IP         $remote_addr;
    proxy_set_header      CLIENT_IP         $remote_addr;
    proxy_pass_request_headers on;
  }
  ...
于 2015-11-14T22:43:26.857 に答える
4

答えはあなたの設定ファイルにあります:)以下はあなたが望むことをするはずです:

real_ip = request.headers["X-Real-IP"]

詳細はこちら: http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-headers

更新適切な答えは別のQにあります:

https://stackoverflow.com/a/4465588

またはこのスレッドで:

https://stackoverflow.com/a/15883610

ネタバレ:

使用するrequest.remote_ip

于 2012-05-22T21:36:59.597 に答える