Flask无法获得远程客户端的真实IP

时间:2019-01-27 06:50:47

标签: python flask

我只是在运行flask应用程序,而不使用nginx和uwsgi,是的,我的主机在负载平衡器后面。

我正在尝试读取所有可以读取IP地址的密钥,但是我没有获得客户端的实际IP。

每个请求中的X-Real-IP都在变化,X-Forwarded-For只有一个IP地址,即负载均衡器IP。

与瓶子有相同的问题。当我直接使用python app.py启动应用程序时,我无法获得真实的IP地址。 是否必须使用uwsgi和nginx来使示例应用程序读取IP?

如果我使用以下配置并转发uwsgi_param,则可以读取响应中的IP地址列表。

wsgi_file.ini下面

[uwsgi] 
socket = 127.0.0.1:8000
plugin    = python
wsgi-file = app/app.py
process   = 3
callable = app

nginx.conf

server {
        listen 3000;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;


        location / {
                uwsgi_pass  0.0.0.0:8000; #unix:///tmp/uwsgi.sock;
                include        /etc/nginx/uwsgi_params;
                uwsgi_param X-Real-IP $remote_addr;
                uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
                uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
        }
}

我启动了nginx服务器,并使用以下命令运行了该应用程序: uwsgi --ini wsgi_file.ini。

1 个答案:

答案 0 :(得分:1)

可以使用request.remote_addr在Flask中获取客户端的IP地址。

请注意,如果您在客户端和服务器之间使用反向代理,负载平衡器或任何其他中介,那么这将返回最后一个中介的IP地址,该中介直接将请求发送到Flask服务器。如果中介程序包含X-Real-IPX-Forwarded-ForForwarded标头,那么您仍然可以找出客户端的IP地址。