SSL 和 WSGI 应用程序 - Python

发布于 2024-09-01 19:35:44 字数 113 浏览 11 评论 0原文

我有一个 WSGI 应用程序,我想将其置于 SSL 后面。我的 WSGI 服务器是 gevent

在这种情况下,通过 SSL 为应用程序提供服务的好方法是什么?

I have a WSGI app that I would like to place behind SSL. My WSGI server is gevent.

What would a good way to serve the app through SSL in this case be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眉黛浅 2024-09-08 19:35:44

gevent.wsgi 模块没有内置 SSL 支持。如果您正在使用它,请将其放在 nginx 后面,它将通过 HTTPS 接收请求,但使用非加密的 HTTP 将它们代理到您的 gevent 应用程序。

gevent.pywsgi 模块确实具有内置的 SSL 支持,并且具有兼容的接口。设置 keyfilecertfile 参数以使服务器使用 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()

The gevent.wsgi module does not have built-in SSL support. If you're using it, put it behind nginx which would receive request over HTTPS but proxy them to your gevent app using non-encrypted HTTP.

The gevent.pywsgi module does have built-in SSL support and has a compatible interface. Set the keyfile and certfile arguments to make the server use SSL. Here's an example: 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()
裸钻 2024-09-08 19:35:44

看起来 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 应用程序提供服务。

It looks like gevent now has an ssl module. If you have a web server implemented on top of gevent, I imagine you could modify it to wrap incoming connections with that module's ssl socket class before passing it on to the http handlers.

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

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

Otherwise, you could always use good old apache + mod_wsgi to serve your wsgi app.

雨巷深深 2024-09-08 19:35:44

我会让 http 服务器处理 ssl 传输。

I would let the http server deal with the ssl transport.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文