我有一个WSGI应用程序,我想放在SSL后面。我的WSGI服务器是 gevent 。
在这种情况下通过SSL提供应用程序的好方法是什么?
答案 0 :(得分:6)
gevent.wsgi模块没有内置的SSL支持。如果您正在使用它,请将它放在nginx后面,它将通过HTTPS接收请求,但使用非加密HTTP将它们代理到您的gevent应用程序。
gevent.pywsgi模块确实具有内置SSL支持并具有兼容接口。设置keyfile
和certfile
参数以使服务器使用SSL。这是一个例子:wsgiserver_ssl.py:
#!/usr/bin/python
"""Secure WSGI server example based on gevent.pywsgi"""
from __future__ import print_function
from gevent import pywsgi
def hello_world(env, start_response):
if env['PATH_INFO'] == '/':
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"<b>hello world</b>"]
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
return [b'<h1>Not Found</h1>']
print('Serving on https://127.0.0.1:8443')
server = pywsgi.WSGIServer(('0.0.0.0', 8443), hello_world, keyfile='server.key', certfile='server.crt')
# to start the server asynchronously, call server.start()
# we use blocking serve_forever() here because we have no other jobs
server.serve_forever()
答案 1 :(得分:3)
看起来gevent现在有一个ssl模块。如果你有一个在gevent之上实现的web服务器,我想你可以修改它以包装传入的连接与该模块的ssl套接字类,然后再传递给http处理程序。
http://blog.gevent.org/2010/02/05/version-0-12-0-released/
http://www.gevent.org/gevent.ssl.html
否则,您总是可以使用好的旧apache + mod_wsgi来为您的wsgi应用程序提供服务。
答案 2 :(得分:2)
我会让http服务器处理ssl传输。