我在NGINX代理后面设置了一个带有JHipster 4.10.2的tomcat,一切运行良好,但是当我转到Audit视图以显示已登录的用户时...存储的IP始终是服务器IP。有时,存储的IP地址是本地主机IP地址127.0.0.1,其他时间是服务器的公共IP,而不是登录到应用程序的客户端/用户IP。
我测试了java代码以获取请求中的IP地址:
request.getHeader("X-FORWARDED-FOR")
这样我就可以获得正确的IP地址(来自拨打电话的用户的真实IP地址)但是我不会使用这种方式来修改或扩展以获取IP地址。
我在application.yml和application-prod.yml上使用use-forward-headers标志为true
server.use-forward-headers = true
nginx配置:
location /myapp {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/myapp;
index index.html index.htm;
}
请尝试$ http_x_real_ip,我从https://easyengine.io/tutorials/nginx/forwarding-visitors-real-ip得到了答案
proxy_set_header X-Forwarded-For $http_x_real_ip;