优点&利用Apache或nginx以及它们如何在内部工作以最大化资源利用率
我可以使用Apache& Nginx在一起?如果我只使用Nginx那么我可以面对什么问题?
答案 0 :(得分:7)
Apache有一些缺点,特别是当它与PHP模块一起使用时。
Apache的流程模型是每个连接使用一个单独的流程。每个进程都包含PHP的所有开销以及您可能已加载的任何其他模块。 Apache进程可以运行PHP脚本或为一个请求提供静态内容。如果PHP有内存泄漏(有时会发生),则该过程的大小会继续增加。此外,当启用KeepAlive(通常建议)时,该过程在连接后保持活动几秒钟,消耗一个"插槽"另一个客户端可能能够使用并帮助服务器更快地访问其MaxClients。
Nginx 是一种替代的网络服务器,通常使用Linux" epoll"用于以非阻塞模式处理请求的API。这意味着一个进程可以处理多个同时连接。 Epoll是一种有效的方式来告诉单个进程它需要处理哪些连接以及哪些连接可以等待。 Nginx的目标是解决" C10k"问题 - 如何拥有10,000个并发连接。
这自然与FastCGI流程管理器php-fpm齐头并进。 Nginx本身没有PHP内置。当它收到一个PHP脚本的请求时,它会调用php-fpm来运行脚本,然后将结果返回给nginx,后者将它返回给客户端。
这一切都使用比类似的Apache + mod_php配置少得多的内存。
php-fpm比mod_php还有一些更大的优势:
Php-fpm可以与Apache一起运行,实际上这可以让你利用Apache更高效的Worker MPM(或Apache 2.4中的事件)。但是,我的经验是在Apache中配置它比在nginx中配置它要复杂得多,即使使用Worker,它仍然不如nginx有效。
转移到nginx的缺点 - 不是很多,但要记住的事情:
Nginx的特征
只有Nginx,你会丢失一大堆特定于apache的功能,比如所有的mod_dav。你有效地失去了很多模块
<强>结论强>
如果您需要Apache模块,那么nginx的最佳用途是在Apache前面。如果您可以在多个Apache实例之间使用它作为负载均衡器,并且您突然有一个混合设置,而不是