对Apache或nginx的优缺点以及它们如何在内部工作以最大化资源利用率
我可以一起使用Apache和Nginx吗?如果我只使用Nginx那么我可以面对什么问题?
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中的Event).但是,我的经验是,在Apache中配置它比在nginx中配置它要复杂得多,即使使用Worker,它仍然不如nginx那么高效.
转移到nginx的缺点 - 不是很多,但要记住的事情:
Nginx的特征
只有Nginx,你会丢失一大堆特定于apache的功能,比如所有的mod_dav.你有效地失去了很多模块
结论
如果您需要Apache模块,那么nginx的最佳用途是在Apache前面.如果您可能在多个Apache实例之间使用它作为负载均衡器,那么您突然有一个混合设置
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |