Приложения SSL и WSGI - Python - PullRequest
5 голосов
/ 18 мая 2010

У меня есть приложение WSGI, которое я хотел бы разместить за SSL. Мой WSGI-сервер gevent .

Каким будет хороший способ обслуживания приложения через SSL в этом случае?

Ответы [ 3 ]

7 голосов
/ 30 мая 2010

Модуль 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()
3 голосов
/ 28 мая 2010

Похоже, у 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.

2 голосов
/ 18 мая 2010

Я бы позволил серверу http иметь дело с транспортом ssl.

...