gpt4 book ai didi

python - 如何在nginx代理后面的 Pyramid 服务器中获取客户端的真实IP

转载 作者:太空狗 更新时间:2023-10-30 00:51:40 28 4
gpt4 key购买 nike

我有一个 Pyramid 应用程序,它在某些地方使用 request.environ['REMOTE_ADDR']

该应用程序由 Python Paste 在端口 6543 上提供服务,并且在端口 80 上监听的 nginx 服务器正在将请求转发到 Paste 服务器。

nginx 配置的灵感来自 Pyramid cookbook:

server {

listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6

server_name localhost;

access_log /var/log/nginx/localhost.access.log;

location / {

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:6543;

}

在 Pyramid 应用程序中,变量 request.environ['REMOTE_ADDR'] 现在始终等于 127.0.0.1。我看到了一些解决这个问题的策略,但我不知道是否有推荐的方法来做到这一点。

这是我正在考虑的:

  • 如有必要,添加一个 NewRequest 订阅者替换 request.environ['REMOTE_ADDR']:

    如果 event.request.environ 中有“HTTP_X_REAL_IP”:
    event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP']

  • 在到达 Pyramid 层之前使用 wsgi 中间件修改 request.environ。

  • 别的

您使用哪种策略来部署 Pyramid 应用程序?如果我有两个 nginx 代理会怎样? (第一个服务于局域网,第二个服务于直接连接到互联网的机器)。

最佳答案

如果您通过 use = egg:PasteDeploy#prefix 在 WSGI 管道中使用 paste.deploy.config.PrefixMiddleware,它将自动转换 X- Forwarded-ForREMOTE_ADDR。它对你的反向代理的其他属性也很有用,例如它会将 X-Forwarded-Proto 翻译成 wsgi.url_scheme 以确保如果用户使用 https 访问那么生成的 URL 也是 https。

http://pythonpaste.org/deploy/class-paste.deploy.config.PrefixMiddleware.html

关于python - 如何在nginx代理后面的 Pyramid 服务器中获取客户端的真实IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com