所有,
我有一个使用Flask构build的两个端点的API。 我正在使用nginx / uwsgi组合服务,每当我发送一个GET请求到一个端点时,我得到一个奇怪的错误。 另一个端点工作得很好。
这是从我的uwsgi日志get请求的输出
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1646, in request_context return RequestContext(self, environ) File "/usr/local/lib/python2.7/dist-packages/flask/ctx.py", line 166, in __init__ self.url_adapter = app.create_url_adapter(self.request) File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in create_url_adapter server_name=self.config['SERVER_NAME']) File "/usr/local/lib/python2.7/dist-packages/werkzeug/routing.py", line 1196, in bind_to_environ environ['REQUEST_METHOD'], environ.get('PATH_INFO'), KeyError: 'REQUEST_METHOD'
而且,这里是来自get请求的nginx错误日志的输出
2013/12/26 15:22:16 [error] 833#0: *9 upstream prematurely closed connection while reading response header from upstream, client: 71.71.53.31, server: scholarly, request: "GET /citelet/ HTTP/1.1", upstream: "uwsgi://unix:///tmp/citelet.sock:", host: "162.243.219.38"
我对这个问题的模糊性表示抱歉。 我在同一个硬件上安装了这个服务器,使用相同的库,之前没有任何问题。 错误是令人困惑,我不知道从哪里开始寻找。
提前致谢!
愚蠢的错误。 在我的nginx配置中有一个错误。 它指向一个不存在的套接字。
server { listen 80; server_name scholarly; # crowdscholar endpoint location /crowdscholar { uwsgi_pass unix:///tmp/crowdscholar.sock; include uwsgi_params; # strip path before handing it to app uwsgi_param SCRIPT_NAME /crowdscholar; uwsgi_modifier1 30; } # citelet endpoint location /citelet { uwsgi_pass unix:///tmp/citelet.sock; include uwsgi_params; # strip path before handing it to app uwsgi_param SCRIPT_NAME /citelet; uwsgi_modifier1 30; } }
只是作为参考:我得到了同样的错误,并意识到我忘了添加include uwsgi_params;
就像user1558914的回答一样。
那么在make restart
后它仍然不能工作,因为我的uwsgi重启规则在nginx重启之前失败了。 一旦我用/etc/init.d/nginx restart
手动重启nginx,KeyError就停止了。