asc*_*bol 5 python deployment wsgi nginx pyramid
我有一个金字塔应用程序,request.environ['REMOTE_ADDR']在某些地方使用.
该应用程序由端口6543上的Python Paste提供,而端口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;
}
Run Code Online (Sandbox Code Playgroud)
在Pyramid应用程序中,变量request.environ ['REMOTE_ADDR']现在始终等于127.0.0.1.我看到了一些解决这个问题的策略,但我不知道是否有推荐的方法来解决这个问题.
这是我正在考虑的事情:
添加一个NewRequest订户,如有必要,它将替换request.environ ['REMOTE_ADDR']:
if 'HTTP_X_REAL_IP' in event.request.environ:
event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP']
在点击金字塔图层之前使用wsgi中间件修改request.environ.
别的
您使用哪种策略来部署Pyramid应用程序?如果我有两个nginx代理会怎么样?(第一个服务于LAN,第二个服务器直接连接到互联网).
如果您paste.deploy.config.PrefixMiddleware在WSGI管道中使用use = egg:PasteDeploy#prefix,它将自动转换X-Forwarded-For为REMOTE_ADDR.它也适用于您的反向代理的其他属性,例如它将转换X-Forwarded-Proto为wsgi.url_scheme确保如果用户使用https访问,则生成的URL也是https.
http://pythonpaste.org/deploy/class-paste.deploy.config.PrefixMiddleware.html
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |