簡體   English   中英

無法從Java中的nginx反向代理獲取遠程IP

[英]Cannot get remote IP from nginx reversal proxy in Java

目前我正面臨着nginx和playframework的問題。 我已經在我的播放應用程序前面將nginx配置為反向代理。

當我嘗試在java中讀取客戶端ip(在播放框架中)時,有時我可以獲得正確的ip,但有時我得到“0:0:0:0:0:0:0:1”甚至我得到多個ip地址如“222.72.xxx.xxx,10.210.44.35,115.239.xxx.x”。

看起來它有時會停止工作,但經常出錯。

這是我的nginx.conf配置:

http {
    ##
    # Basic Settings
    ##

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme  $scheme;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header Host  $http_host;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    upstream webapp {
            server localhost:9000;
            server localhost:9002;
    }

    server {
      listen       80;
      listen       [::]:80;
      server_name  myserver.com;
      return       301 http://www.myserver.com$request_uri;
    }

    server {
      listen       80;
      listen       [::]:80;
      server_name  www.myserver.com;

      location /assets/ {
        root      /home/myuser/apps;
      }

      location /static/ {
        expires   30d;
        root      /home/myuser/apps;
      }

      location / {
        proxy_pass  http://webapp;
      }
      location /apis/ {
        proxy_pass  http://localhost:9001;
      }
    }
...
}

這里有一些日志我從nginx的access.log中提取並從我的java應用程序中記錄:access.log:

115.239.xxx.x - - [20/Aug/2014:22:30:29 +0200] "GET /news/article/53f00d5efeb89844977b5477 HTTP/1.1" 499 0 "http://www.myserver.com/news/article/53f00d5efeb89844977b5477" "Mozilla/5.0 (iphone; U; CPU iPhone OS 4_3_5 like Mac OS X; en-US) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5”

java app日志:

2014-08-20 22:30:29,621 INFO  application - Activity  - IP: 222.72.xxx.xxx, 10.210.44.35, 115.239.xxx.x, URL: /news/article/53f00d5efeb89844977b5477, UserAgent: Mozilla/5.0 (iphone; U; CPU iPhone OS 4_3_5 like Mac OS X; en-US) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5

順便說一下,服務器也支持IPV6,這就是我在nginx.conf中添加IPv6支持的原因。

誰能幫我嗎?

非常感謝!

干杯,

馬丁

Play中有一個配置選項,用於控制是否信任Nginx發送的X-Forwarded-For標頭。 你需要添加

trustxforwarded=true

到您的application.conf 你做到了嗎?

它位於高級代理設置標題下的文檔https//www.playframework.com/documentation/2.3.x/HTTPServer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM