У меня есть приложение WSGI, которое я хотел бы поместить позади SSL. Мой сервер WSGI является gevent.
Что было бы хороший способ вручить приложение через SSL в этом случае быть?
Похоже, у gevent теперь есть ssl-модуль. Если у вас есть веб-сервер, реализованный поверх gevent, я полагаю, вы можете изменить его, чтобы обернуть входящие соединения с помощью класса сокета 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.
Я бы позволил http серверу разобраться с ssl транспортом.
Модуль gevent.wsgi не имеет встроенной поддержки SSL. Если вы используете его, поместите его за nginx, который будет получать запросы по HTTPS, но проксировать их вашему приложению gevent, используя незашифрованный HTTP.
Модуль 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()