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

用于部署WSGI应用程序的典型configuration包括作为逆向代理的通用Web服务器(如nginx)后面的WSGI服务器(如uWSGI或Gunicorn)。 我知道有一个反向代理的一个主要原因是有效地提供静态文件。 还有其他的原因吗?

假设我的应用程序只涉及Python代码,并不关心静态内容。 为什么我要在这种情况下需要反向代理? uWSGI和Gunicorn都已经提供了一个能够与客户端接口的asynchronousHTTP服务器。

有没有什么实际情况可以让WSGI HTTP服务器直接暴露给外部世界呢?

  • 你有更多的configuration选项,像一个完整的反向代理

    • 改写
    • 地点
    • 服务器
    • HTTPS
    • 报头的清理
    • 到期
    • gzip的
    • ….
  • 你可以做负载平衡

  • 你可以使用proxy_cache
  • 即使应用程序服务器closures,也可以实现自定义错误页面
  • 你可以实现一个WAF
  • 您可以(有时)针对漏洞进行热补丁

BONUSPOINT

  • 您可以使用以下设置(nginx)以100.000个请求/秒(平均硬件)来打动客户端:

location /perftest/ { return 200; } 

使用反向代理的其他好处。

其他好处可以得到,可能会有利于你。

  • 您可以从互联网上隐藏信息(networking服务器版本,应用程序服务器,数据库服务器,API)
  • 您可以在一个域后面实现多种Web服务器技术(Linux tomcat + Windows IIS等)
  • 您可以终止https / SSL连接并将其映射到内部http服务。
  • 您可以集中所有日志logging。
  • 你可以集中所有的DDOS预防
  • 您可以从Web服务器层实施身份pipe理。

安全优势

  • 内部服务器隐藏如上。
  • 您可以通过互联网路由器/防火墙内部的应用程序服务器服务器和数据库服务器,而无需借助主机上的软件防火墙(称为DMZ)。
  • 您可以保护不会立即解决已知问题(Web应用程序防火墙)或已知攻击模式的服务器。