我目前在使用nginx和playframework时遇到了问题。我已将nginx配置为我的play应用程序的反向代理。
当我尝试在Java中读取客户端IP(在play框架中),有时可以获取到正确的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应用程序日志:
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支持。
有人能帮帮我吗?
非常感谢!
祝好,
Martin
X-Forwarded-For
头可以包含来自多个代理的信息,但您应该只信任最后一个值。请参见:http://en.wikipedia.org/wiki/X-Forwarded-For#Format关于 cookies 不确定。您可能需要提供更多信息并创建一个新问题。 - Rich Dougherty