![在 Amazon EC2 上的应用服务器前运行 nginx 的目的是什么?](https://linux22.com/image/609883/%E5%9C%A8%20Amazon%20EC2%20%E4%B8%8A%E7%9A%84%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%89%8D%E8%BF%90%E8%A1%8C%20nginx%20%E7%9A%84%E7%9B%AE%E7%9A%84%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我对后端架构进行了大量研究。我目前正在 Amazon 的 Web Services 上运行 django 应用服务器和 postgresql 数据库服务器。我所有的内容都通过 Gunicorn 提供。我想知道为什么 nginx 服务器位于 django 应用服务器的前面。它们的用途是什么?以下是一张图:
https://d36cz9buwru1tt.cloudfront.net/architecture_diagram_praekelt-1.jpg
答案1
在许多堆栈中,nginx 通常位于 unicorn 或 gunicorn 前面,用于缓冲对慢速客户端的响应。
有关更多信息,请参阅 nginx 文档:
http://wiki.nginx.org/HttpProxyModule#proxy_buffering
ELB 不进行缓冲,因此使用 nginx 可以节省您的麻烦。
答案2
一般来说,你会把反向代理放在后端服务器前面,比如 gunicorn(或 java 世界中的 tomcat),因为它们具有更多功能并且更具弹性。
例如,使用 nginx,您可以添加细粒度的访问控制,终止 SSL,并且不容易受到 DOS 攻击(这是 gunicorn 在其文档中特别提到的(http://docs.gunicorn.org/en/latest/deploy.html)。
在 EC2 中,如果您使用的 nginx 或 haproxy 没有特殊功能,则可以用 ELB 替换 nginx 和 haproxy。请参阅http://harish11g.blogspot.com/2012/11/amazon-elb-vs-haproxy-ec2-analysis.html对 ELB 和 haproxy 进行比较。