在https上运行gunicorn?

时间:2011-09-13 18:40:39

标签: ssl https gunicorn

我们有一些Django设置通过代理(Apache和Nginx),最终进入实际的Django运行时。

我们需要在我们的网络中进行端到端的HTTPS。我们一直在重新审视Gunicorn,因为它在我们的其他设置中取得了成功和性能,但需要使用端到端的HTTPS进行测试才能保持一致。

我们的拓扑结构是这样的:

https://foo.com - > [面向公众的代理] - > (https) - > [内部服务器https://192...:8001]

如何配置Gunicorn使用自签名证书侦听HTTPS?

4 个答案:

答案 0 :(得分:64)

Gunicorn现在支持SSL,as of version 17.0。您可以将其配置为侦听https,如下所示:

$ gunicorn --certfile=server.crt --keyfile=server.key test:app

如果您使用--bind侦听端口80,请记住将端口更改为443(HTTPS连接的默认端口)。例如:

$ gunicorn --certfile=server.crt --keyfile=server.key --bind 0.0.0.0:443 test:app

答案 1 :(得分:16)

大致迟到的回复,但对于遇到此问题的其他人,还有另一个选项,使用nginx作为上面的“[面向公众的代理]”。

配置nginx以处理端口443上的传入SSL流量,然后将proxy_pass配置为内部端口上的gunicorn。外部流量已加密,无论如何都不会暴露nginx和gunicorn之间的流量。我发现这很容易管理。

答案 2 :(得分:3)

如果您使用的是 gunicorn.config.py 或类似的 gunicorn 配置文件,您可以添加证书文件和密钥文件。

certfile = '/etc/letsencrypt/live/example.com/fullchain.pem'
keyfile = '/etc/letsencrypt/live/example.com/privkey.pem'

配置文件可用于将设置初始化为环境变量,如果您有很多设置,这会很有帮助。 使用配置文件

  • 通过创建一个名为的文件来创建一个配置文件 gunicorn.config.py

  • 一些通常的设置是

      bind = "0.0.0.0:8000"
      workers = 4
      pidfile = 'pidfile'
      errorlog = 'errorlog'
      loglevel = 'info'
      accesslog = 'accesslog'
      access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
    

    当然还有

      certfile = '/etc/letsencrypt/live/example.com/fullchain.pem'
      keyfile = '/etc/letsencrypt/live/example.com/privkey.pem'
    

查看 documentation 和配置文件 example

使用这些设置运行 gunicorn

    $ gunicorn app:app

自从

<块引用>

默认情况下,将从运行 gunicorn 的同一目录读取名为 gunicorn.conf.py 的文件。

答案 3 :(得分:0)

除了 certfilekeyfile 之外,您还需要添加 ca-certs。没有通过 ca-certs,我在 Android 设备上获得了 Trust anchor for certification path not found.

示例命令:

/usr/bin/python3 /usr/local/bin/gunicorn --bind 0.0.0.0:443 wsgi:app --workers=8 --access-logfile=/root/app/logs/access.log --error-logfile=/root/app/logs/error.log --certfile=/root/app/certificate.crt --keyfile=/root/app/private.key --ca-certs=/root/app/ca_bundle.crt --daemon