我有一些警惕的奇怪问题。我配置Lighttpd传递/测试到fastcgi后端。 刚刚在配置中添加了这个
fastcgi.server = ("/test" =>
("127.0.0.1" =>
(
"host" => "127.0.0.1",
"port" => 7101,
"docroot" => "/",
"check-local" => "disable"
)
)
)
现在,当我开始使用flup示例时,点击127.0.0.1:80/test,一切正常。测试了uWSGI,仍然没问题。
flup示例:
#!/usr/bin/env python
from flup.server.fcgi import WSGIServer
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
WSGIServer(myapp, bindAddress = ('127.0.0.1',7101)).run()
现在,唯一的问题是当我开始gevent它不会起作用。 Lighttpd mod_fastcgi说后端刚刚被阻止。
有趣的是当我改变处理程序以返回字符串时,导致WSGI需要迭代,并从我的浏览器命中127.0.0.1:7101它按预期工作。这应该是WSGIServer,它如何以这种方式工作?
这是gevent代码:
#!/usr/bin/python
"""WSGI server example"""
from gevent.wsgi import WSGIServer
def app(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World", StopIteration] # this is WSGI test, not working
return "Hello World"
# when set like this, frontend :80 still wont work (500 Internal error),
# but 127.0.0.1:7101 work like standard http
if __name__ == '__main__':
WSGIServer(('', 7101), app).serve_forever()
底线是,为什么只有gevent不能在这个设置中工作,并且flup和uWSGI都在工作?在官方示例here中是否有一些秘密设置没有提及。
答案 0 :(得分:1)
因为gevent.wsgi.WSGIServer不是fcgi服务器,所以它只是http服务器。您可以将您的请求从lighttpd代理到gevent为http,或者使用wsgi。
答案 1 :(得分:0)
你可以看到flup here声明它是SPEAK FastCGI(不是HTTP ),而uWSGI here说“出生时只是一个WSGI服务器”。 现在Gevent说here“基于libevent-http的快速WSGI服务器”,这让我感到困惑,但后来我尝试了gunicorn,而且钢铁失败了。 然后我发现here“Gunicorn'Green Unicorn'是用于UNIX的Python WSGI HTTP 服务器”。这意味着gevent和gunicorn WSGI处理程序是HTTP请求而不是FastCGI ,但是,正如Fedor Gogolev所说,对于您的处理程序它们是WSGI服务器。
因此,对于 Flup 和 uWSGI ,请配置lighttpd(或任何其他网络服务器)以使用 fastcgi 模块,但 gunicorn 和 gevent 你使用代理模块,对他们来说你根本不需要使用前端!如果没有静态的东西要服务或其他你可以省略前端的原因 gunicorn 表示它是快速和稳定的警惕。