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

Pra*_*kla 7 apache nginx

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

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

Vik*_*mar 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中的Event).但是,我的经验是,在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实例之间使用它作为负载均衡器,那么您突然有一个混合设置