在 http 和 https 上运行 Gunicorn
Posted
技术标签:
【中文标题】在 http 和 https 上运行 Gunicorn【英文标题】:Running Gunicorn on both http and https 【发布时间】:2016-06-05 09:00:52 【问题描述】:当我启动我的 Gunicorn 服务时,我目前使用这个命令来启动它:
gunicorn --certfile=/Projects/thebodyofchrist.us.crt --keyfile=/Projects/thebodyofchrist.us.key bodyofchrist.wsgi -b 0.0.0.0:443 -b 0.0.0.0:80 -w 10
用于将 gunicorn 绑定到 http 和 https -- 或设置 apache2 以侦听 http 并使用现有参数将请求重定向到 https。
我有数百个指向http://example.com/sample/request
的链接
并需要它自动转到https://example.com/sample/request
gunicorn 正在托管 django。
感谢您的帮助!
【问题讨论】:
【参考方案1】:可以在 gunicorn 中添加此类支持。目前是不可能的。
https://github.com/benoitc/gunicorn/issues/1466
【讨论】:
【参考方案2】:Gunicorn 是一个非常可靠的项目,我希望他们有朝一日能够通过多个端口绑定和命令行开关来指示 SSL 优先级。
当您最终投入生产时,您会想要使用 Apache 或 nginx 的卓越负载平衡。
但没有什么能阻止您(在开发过程中)运行一些绑定到端口 80 的工作人员和一些绑定到端口 443 的工作人员,并设置了密钥文件和证书文件。然后,您可以将登录链接写为“绝对”网址,例如href="https://yoursite/login" 登录后,他们将使用 https 网址。
#!/bin/sh
# put 8 workers as Daemon listening for HTTPS on 443
gunicorn -D -w 8 --certfile=/Projects/thebodyofchrist.us.crt --keyfile=/Projects/thebodyofchrist.us.key bodyofchrist.wsgi -b 0.0.0.0:443
# put 2 workers as Daemon listening for HTTP on port 80
gunicorn -D -w 2 bodyofchrist.wsgi -b 0.0.0.0:80
【讨论】:
现在如何将所有 http 流量重定向到 https? 这取决于您使用的框架。例如,如果您使用 FastAPI 或 starlette。有一个中间件可以做到这一点:HTTPSRedirectMiddleware 它只是使用不同的模式和端口号进行重定向。看看这里的代码也许它可以帮助你github.com/encode/starlette/blob/… 我不确定运行仅将请求从 http 重定向到 https 的工作人员是否是最佳选择。 运行第一行时,会不会每次到达第二行?【参考方案3】:可以绑定多个地址。例如:
gunicorn -b 127.0.0.1:8000 -b [::1]:8000 test:app
https://docs.gunicorn.org/en/stable/settings.html?highlight=bind#server-socket
所以你可以这样做
gunicorn -b :80 -b :443 test:app
【讨论】:
那不是在 443 和 80 上都使用 ssl 吗? 这是错误的!不适用于带有证书的真正 https!以上是关于在 http 和 https 上运行 Gunicorn的主要内容,如果未能解决你的问题,请参考以下文章
Webpack Dev Server在HTTPS / Web Sockets Secure上运行
运行 ServiceHost 时不能同时支持 http 和 https url
如何在 https 而不是 http 上运行 firebase(函数)模拟器?