ssl 在https上运行gunicorn?

x8diyxa7  于 2023-03-13  发布在  其他
关注(0)|答案(5)|浏览(294)

我们有一些Django设置通过代理(Apache和Nginx),最终到达实际的Django运行时。
我们需要端到端的HTTPS,即使是在我们的网络中。我们一直在重新访问Gunicorn,因为它在我们的其他设置中的成功和性能,但需要测试HTTPS端到端的一致性。
我们的拓扑结构如下:
https://foo.com-〉[面向公众的代理] -〉(https)-〉[内部服务器
如何配置Gunicorn使用自签名证书监听HTTPS?

njthzxwz

njthzxwz1#

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
pjngdqdw

pjngdqdw2#

大量的延迟回复,但是对于任何其他遇到这个问题的人,还有另一个选择使用nginx作为上面的“[面向公众的代理]”。
配置nginx来处理端口443上的SSL流量,然后在内部端口上配置proxy_pass到gunicorn。外部流量是加密的,nginx和gunicorn之间的流量也不会暴露。我发现这很容易管理。

frebpwbc

frebpwbc3#

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

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

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

  • 通过创建名为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.conf.py将从运行gunicorn的同一目录中读取名为www.example.com的文件。

5t7ly7z5

5t7ly7z54#

除了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
dnph8jn4

dnph8jn45#

另一种方法是使用ngrok之类的安全隧道服务。使用ngrok,您可以轻松地从gunicorn服务器通过隧道连接到他们提供的启用https的端点。根据您的目的,这可能是一种方便的解决方法。
它非常非常容易使用--就我个人而言,我觉得nginx对于第一次使用来说有点复杂。
使用ngrok非常简单(安装后):

gunicorn -b 0.0.0.0:4000
ngrok http 4000

这为您提供了一个像https://abcd.ngrok.io这样的安全端点,您可以向其发送请求,就像向gunicorn服务器发送请求一样。
所以http://0.0.0.0:4000/hello变成了https://abcd.ngrok.io/hello

相关问题