我正在测试具有不同配置的 nginx,以替换使用 squid + apache 的架构。我知道我可以使用 nginx 来管理静态请求和负载平衡,但我对一种我不清楚的特定解决方案感兴趣:
我正在使用 2 个 nginx 服务器(平衡)和 proxy_pass 设置将所有请求传递给 apache 服务器。当一个客户端向站点发出请求时,一个 nginx 服务器会处理它并将其发送到 apache 服务器。现在,这种行为如何改进我的系统?似乎所有请求都通过 apache,我根本看不到任何好处。当 100 个同时连接通过 nginx 时会发生什么?这 100 个连接将连接到 apache 服务器,还是某种内部行为对 apache 产生很小的影响?
我知道 nginx 可以执行很多功能,但为什么不将架构的每一部分委托给能够很好地完成其中一部分的软件呢?考虑其中的一些或全部:用于负载平衡的 pound 或 haproxy,用于反向缓存代理的 varnish 或 squid,以及在后端使用 nginx 和 apache 用于静态和动态内容(分别)。
也就是说,我不确定你的问题是什么。您已经告诉 nginx 将所有请求(我假设“通过”您的意思是不缓存它们)传递到 apache 后端。如果没有缓存,好处将是在后端的多个 apache 服务器之间分配负载。如果您只有一个后端 apache 服务器,那么您只能通过缓存内容获得好处,而不仅仅是直接传递请求。
有关您的设置以及您想要做什么的更多详细信息会有所帮助。
当您的站点连接速度很慢时,Nginx 可以帮助您的 Apache。例如,nginx 状态机架构不易受到 Slowloris DDoS http://isc.sans.org/diary.html?storyid=6601的攻击。
同意——让 nginx 直接提供静态内容,而 Apache 只需要处理 PHP 的东西——这意味着更少的 Apache 工作人员,最终意味着更好的性能。
同意 Zero*,让 enginx 处理所有静态,但是,更简单的配置只是将 php 传递给后端,而不是指定不传递给 Apache/PHP 的内容,例如:
location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }