2010-05-18 6 views
3

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

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

ответ

3

Похоже, что gevent теперь имеет модуль ssl. Если у вас есть веб-сервер, реализованный поверх gevent, я предполагаю, что вы можете его изменить, чтобы связать входящие соединения с классом сокета ssl этого модуля, прежде чем передавать его обработчикам http.

http://blog.gevent.org/2010/02/05/version-0-12-0-released/

http://www.gevent.org/gevent.ssl.html

В противном случае, вы всегда можете использовать старый добрый апач + mod_wsgi служить ваш WSGI приложение.

2

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

5

Модуль 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() 
+0

Обновленная ссылка на wsgiserver_ssl.py https://github.com/surfly/gevent/blob/master/examples/wsgiserver_ssl.py – auny