python - 烧瓶无法获取远程客户端的真实 IP
问题描述
我只是在运行一个烧瓶应用程序而不使用 nginx 和 uwsgi,是的,我的主机在 load blancer 后面。
我正在尝试读取所有可以读取 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。
解决方案
客户端的 IP 地址可以在 Flask 中使用request.remote_addr
.
请注意,如果您在客户端和服务器之间使用反向代理、负载均衡器或任何其他中介,那么这将返回最后一个中介的 IP 地址,即直接向 Flask 服务器发送请求的那个。如果中介包含X-Real-IP
,X-Forwarded-For
或Forwarded
标头,那么您仍然可以找出客户端的 IP 地址。
推荐阅读
- javascript - Javascript:如何获取对象或数组的`prototype`或`__proto__`的所有属性
- javascript - 点击提交时如何显示表格并将表单值传递给html和js后端?
- javascript - 如何按月和年对日期数组进行分组
- windows - Powershell 文件随未来和过去时间更新
- python - 在 matplotlib 3d 图上设置轴限制(python)
- java - 带有 JsonTypeInfo 的 Spring Boot Jackson defaultImpl
- typescript - 如何为静态类成员提供类型
- linux-kernel - 使用 Yocto 使用补丁集成内核中的更改
- php - 如何在后端 PHP API 中检查 android 应用内购买订阅是否有效或过期
- javascript - 传递给 useContext 的 useState 不更新状态