我正在测试具有不同配置的 nginx,以替换使用 squid + apache 的架构。我知道我可以使用 nginx 来管理静态请求和负载平衡,但我对一个我不太清楚的特定解决方案感兴趣:
我使用 2 个 nginx 服务器(平衡),并使用 proxy_pass 设置将所有请求传递到 apache 服务器。当一个客户端向站点发出请求时,其中一个 nginx 服务器会处理该请求并将其发送到 apache 服务器。现在,这种行为如何能改善我的系统?似乎所有请求都通过 apache,我根本看不到任何好处。当 100 个同时连接通过 nginx 时会发生什么?这 100 个连接将转到 apache 服务器,还是某种允许对 apache 产生轻微影响的内部行为?
答案1
当您的网站有大量慢速连接时,Nginx 可以帮助您的 Apache。例如,nginx 状态机架构不易受到 Slowloris DDoS 攻击http://isc.sans.org/diary.html?storyid=6601。
答案2
我知道 nginx 可以执行很多功能,但为什么不将架构的每个部分委托给能够很好地完成其中一部分的软件呢?考虑以下部分或全部:pound 或 haproxy 用于负载平衡,varnish 或 squid 用于反向缓存代理,后端分别使用 nginx 和 apache 来处理静态和动态内容。
话虽如此,我不太清楚你的问题是什么。你告诉 nginx 将所有请求(我假设“传递”的意思是不要缓存它们)传递到 apache 后端。如果没有缓存,好处就是将负载分散到后端的多个 apache 服务器上。如果你只有一个后端 apache 服务器,那么你只能通过缓存内容来获得好处,而不仅仅是直接传递请求。
有关您的设置以及您想要做什么的更多详细信息将会有所帮助。
答案3
同意 - 让 nginx 直接提供静态内容,而 Apache 只需要处理 PHP 内容 - 这意味着更少的 Apache 工作者最终意味着更好的性能。
地点 / { 代理密码 http://backendwww; } 位置 ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ { 访问登录关闭; 30天后到期; 根目录/var/www/application_webroot; 错误页面 404 = @fallback; } 位置@fallback { 代理密码 http://backendwww; } 位置 ~ /\.ht { 全部否认; }
答案4
同意 Zero*,让 enginx 处理所有静态,但是,更简单的配置只是将 php 传递给后端,而不是指定不传递给 Apache/PHP 的内容,例如:
location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }