gpt4 book ai didi

java - 无法从Java中的nginx反向代理获取远程IP

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:38 26 4
gpt4 key购买 nike

目前我正面临 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 应用程序中提取的一些日志:访问日志:

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 支持的原因。

谁能帮帮我?

非常感谢!

干杯,

马丁

最佳答案

Play 中有一个配置选项,用于控制是否信任 Nginx 发送的 X-Forwarded-For header 。你需要添加

trustxforwarded=true

到您的 application.conf。你做到了吗?

它在高级代理设置标题下的文档中:https://www.playframework.com/documentation/2.3.x/HTTPServer

关于java - 无法从Java中的nginx反向代理获取远程IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com