Apache还是nginx?我想了解Nginx的基本工作流程,它的优点和缺点

时间:2014-06-21 06:18:11

标签: apache nginx

优点&利用Apache或nginx以及它们如何在内部工作以最大化资源利用率

我可以使用Apache& Nginx在一起?如果我只使用Nginx那么我可以面对什么问题?

1 个答案:

答案 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还有一些更大的优势:

  • 它使用不同的"池",每个池都可以作为单独的Linux用户运行。这提供了一种简单有效的隔离网站的方法(例如,如果它们由不应该阅读彼此的代码的不同客户运行),而没有suexec或suphp的开销或肮脏。
  • 它具有慢速日志功能,可以转储已运行超过X秒的任何脚本的PHP堆栈跟踪。这可以帮助诊断慢速代码问题。

Php-fpm可以与Apache一起运行,实际上这可以让你利用Apache更高效的Worker MPM(或Apache 2.4中的事件)。但是,我的经验是在Apache中配置它比在nginx中配置它要复杂得多,即使使用Worker,它仍然不如nginx有效。

转移到nginx的缺点 - 不是很多,但要记住的事情:

  • 它不支持.htaccess文件。我认为这是个好事,因为.htaccess文件必须由Apache为每个请求解析,这可能会导致很大的开销。
  • 需要重写配置文件。如果您有许多复杂的站点配置,这可能需要一些工作。对于简单的情况,这通常不是什么大问题。

Nginx的特征

  • Nginx很快,因为它不需要为其创建新进程 每个新请求。
  • HTTP代理和Web服务器功能
  • 能够处理10,000多个同时连接 低内存占用(每10k非活动HTTP保持活动约2.5 MB) 连接)
  • 处理静态文件,索引文件和自动索引
  • 使用缓存进行反向代理
  • 使用带内健康检查进行负载平衡
  • 容错
  • Nginx使用的内存非常少,特别是对于静态网页..
  • FastCGI,SCGI,uWSGI支持缓存
  • 基于名称和IP地址的虚拟服务器
  • IPv6对应
  • SPDY协议支持
  • FLV和MP4流媒体
  • 网页访问身份验证
  • gzip压缩和解压缩
  • 具有自己的重写引擎的URL重写
  • 使用即时gzip压缩进行自定义日志记录
  • 响应率和并发请求限制
  • 带宽限制
  • 服务器端包含
  • 基于IP地址的地理位置
  • 用户跟踪
  • 的WebDAV
  • XSLT数据处理
  • 嵌入式Perl脚本
  • Nginx具有高度可扩展性,性能不依赖于此 硬件。

只有Nginx,你会丢失一大堆特定于apache的功能,比如所有的mod_dav。你有效地失去了很多模块

<强>结论

如果您需要Apache模块,那么nginx的最佳用途是在Apache前面。如果您可以在多个Apache实例之间使用它作为负载均衡器,并且您突然有一个混合设置,而不是