我有以下服务器configuration:
Django App – Gunicorn – Nginx
Nginx将传入的请求导向gunicorn实例。 该网站可以直接到达,也可以通过其他域名redirect。 澄清:
应用程序托pipe在api.myapp.com上
在这个设置中,我希望能够获得最终用户的IP地址。 我有以下指令nginx conf api.myapp.com
set_real_ip_from my_ip; real_ip_header X-Forwarded-For; real_ip_recursive on;
通过这些指令,当请求来自redirect时,X-Real-IP头被正确设置,但当请求直接进入api.myapp.com时根本没有设置X-Real-IP头,我在这里有点困惑。 我尝试了几个其他的configuration没有成功。 我能做些什么才能获得用户的真正的IPredirect的情况下,并指示accients?
当客户端请求直接到达api.myapp.com ,HTTP标头由发出请求的实际客户端设置。 除非客户端已经被configuration成设置X-Forwarded-For HTTP头部,否则不会有这样的头部。
现在,nginx的set_real_ipfunction的目的是让nginx认为请求实际上来自头部指定的IP地址,而不是来自TCP套接字的IP地址。
因此,nginx内部远程IPvariables的整体效果总是具有实际的客户端IP地址。 IP地址是X-Forwarded-For HTTP头的内容(如果存在),并且源IP与允许列表匹配。 否则,它是TCP套接字的远程IP地址。
这个远程IP地址然后在日志文件中使用,传递给应用程序等。
所以,要解决您的问题,您需要修复您的代码以使用nginx提供的远程IP地址。