为什么要在 WSGI 服务器前面放置一个反向代理?

为什么要在 WSGI 服务器前面放置一个反向代理?

部署 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 应用程序防火墙)或已知攻击模式的影响。

相关内容