在 Amazon EC2 上的应用服务器前运行 nginx 的目的是什么?

在 Amazon EC2 上的应用服务器前运行 nginx 的目的是什么?

我对后端架构进行了大量研究。我目前正在 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 进行比较。

相关内容