部署 WSGI 应用程序的典型配置包括通用 Web 服务器(如 nginx)后面的 WSGI 服务器(如 uWSGI 或 Gunicorn),该服务器充当反向代理。我知道使用反向代理的一个主要原因是高效地提供静态文件。还有其他原因吗?
假设我的应用程序仅涉及 Python 代码,而不关心静态内容。在这种情况下我为什么要使用反向代理?uWSGI 和 Gunicorn 都已经提供了一个能够与客户端交互的异步 HTTP 服务器。
在哪些实际情况中我最好将 WSGI HTTP 服务器直接暴露给外界?
答案1
你可以使用更全面的反向代理来配置更多选项
- 改写
- 位置
- 服务器
- https
- 标头清理
- 到期
- 压缩
- ....
你可以做负载平衡
- 你可以使用proxy_cache
- 即使你的应用服务器宕机了,你也可以实现自定义错误页面
- 你可以实施 WAF
- 有时你可以使用热补丁修复漏洞
奖励积分
- 你可以使用以下设置(nginx)以每秒 100,000 个请求(平均硬件)的速度给客户留下深刻印象:
。
location /perftest/ {
return 200;
}
答案2
使用反向代理的其他优势。
您还可以获得其他可能对您有益的好处。
- 您可以隐藏来自互联网的信息(Web 服务器版本、应用服务器、数据库服务器、API)
- 您可以在一个域后面实现多种 Web 服务器技术(Linux tomcat + Windows IIS 等)
- 您可以终止 https/SSL 连接并将其映射到内部 http 服务。
- 您可以集中所有日志记录。
- 你可以集中所有 DDOS 预防
- 您可以从 Web 服务器层实现身份管理。
安全优势
- 内部服务器隐藏如上所述。
- 您可以通过互联网对内部应用服务器和数据库服务器进行路由/防火墙保护,而无需借助主机上的软件防火墙(称为 DMZ)。
- 您可以保护无法立即修复的服务器免受已知问题(Web 应用程序防火墙)或已知攻击模式的影响。