【发布时间】:2012-03-11 21:54:17
【问题描述】:
我有一个 Pyramid 应用程序,它在某些地方使用 request.environ['REMOTE_ADDR']。
应用程序由 Python Paste 在端口 6543 上提供服务,并且在端口 80 上侦听的 nginx 服务器正在将请求转发到 Paste 服务器。
nginx 配置的灵感来自 Pyramid 食谱:
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。 我看到了一些解决这个问题的策略,但我不知道是否有推荐的方法来做到这一点。
这是我正在考虑的:
-
如有必要,添加一个替换 request.environ['REMOTE_ADDR'] 的 NewRequest 订阅者:
if 'HTTP_X_REAL_IP' in event.request.environ: event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP'] 在到达 Pyramid 层之前使用 wsgi 中间件修改 request.environ。
别的东西
您使用哪种策略来部署 Pyramid 应用程序? 如果我有两个 nginx 代理会发生什么? (第一个服务于局域网,第二个服务于直接连接到互联网的机器)。
【问题讨论】:
标签: python deployment nginx pyramid wsgi