gunicorn与gaiohttp工人总是返回404与烧瓶的应用程序
问题描述:
我运行一个烧瓶应用程序使用nginx代理后面的gunicorn,我试图让gaiohttp工人工作。当选择gaiohttp工作者时,该应用仅返回404所有URLSgunicorn与gaiohttp工人总是返回404与烧瓶的应用程序
当使用同步或gevent工作者时,一切正常。也不直接运行gunicorn和gaiohttp,即不使用nginx它工作正常。
我已阅读了所有我能找到的东西。
我错过了什么吗?运行在nginx代理后面时,gaiohttp worker是否有效?
我的nginx的配置:
location /app {
proxy_pass http://127.0.0.1:9002;
rewrite /app(.*) /$1 break;
proxy_redirect off;
proxy_buffering on;
proxy_pass_header Server;
proxy_set_header X-Scheme $scheme;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Script-Name /app;
}
gunicorn:
/usr/bin/gunicorn --workers 2 -k gaiohttp -b 127.0.0.1:9002 app:app
使用
答
我设法来解决这一问题的gunicorn等等等等的最新版本。
线在这里是造成问题的nginx的配置:
rewrite /app(.*) /$1 break;
,我需要在我的瓶的应用程序正确处理反向代理的代理中间件。
class ReverseProxied(object):
'''Wrap the application in this middleware and configure the
front-end server to add these headers, to let you quietly bind
this to a URL other than/and to an HTTP scheme that is
different than what is used locally.
In nginx:
location /myprefix {
proxy_pass http://192.168.0.1:5001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Script-Name /myprefix;
}
:param app: the WSGI application
'''
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
if script_name:
server = environ.get('HTTP_X_FORWARDED_SERVER', '')
if server:
environ['HTTP_HOST'] = server
environ['SCRIPT_NAME'] = script_name
path_info = environ['PATH_INFO']
if path_info.startswith(script_name):
environ['PATH_INFO'] = path_info[len(script_name):]
scheme = environ.get('HTTP_X_SCHEME', '')
if scheme:
environ['wsgi.url_scheme'] = scheme
return self.app(environ, start_response)
在应用中的__init__.py
:app.wsgi_app = ReverseProxied(app.wsgi_app)