繁体   English   中英

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

[英]flask not able to get the real ip of the remote client

我只是运行一个烧瓶应用程序,而不是使用 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

配置文件

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。

客户端的 IP 地址可以在 Flask 中通过request.remote_addr

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM