apache_nginx实用参考
原文
发表时间January 28, 2015
这两个开源项目在很多方面有共性,但是又各有特色,不能简单的考虑使用一个完全的替代另一个。
需要根据不同的应用场景来选择。
未完结。待续
概述
apache灵活,强大,广泛的支持。
nginx开始是为了解决C10K问题,异步事件驱动模型,轻量级,在嵌入式硬件上容易配置,擅长处理静态内容,设计上把动态请求转发给适合处理的程序。
资源利用率高,响应快速,专注于web服务内核和代理服务。
请求处理结构
两者最大的不同在于连接和请求服务的处理方式上。
apache
提供了multi-processing modules (Apache calls these MPMs),apache提供了灵活的架构设计,可以使用不同的解决方案来处理连接和请求
mpm_prefork
简短的说,效率低已经不用了。
一个线程处理一个请求,PHP不是线程安全的,所以使用mod_php模块来处理。
mpm_worker
产生多个进程,每个进程有多个线程来处理请求,效率比prefork要好很多。
mpm_event
这个和worker差不多,但是针对长连接做了优化。
Nginx
解决并发问题,异步,非阻塞,事件驱动。
生成worker进程,每个可以处理上千个连接。通过快速轮询机制持续的检查和处理事件,实现了处理工作和连接工作的解耦,使每个worker专注于自己的职责。
静态和动态内容
apache
可以使用传统的基于文件的方式处理静态内容,性能大致上是MPM的函数相当
通过在每个worker实例中嵌入语言解释器来处理动态内容,这样就可以在web服务内部处理,而不是通过外部组件。通过动态栽入模块的方式。
配置极为灵活,模块可替换,没有复杂的通讯兼容性问题要处理
nginx
不能在本地处理动态内容,采用转发给外部处理器,然后再转发结果给请求的方式。
意味着管理员需要配置中间件协议,目前nginx支持(http, FastCGI, SCGI, uWSGI, memcache),增加了些复杂度。
算是动静分离的处理方式把。
分布式和集中式配置文件
两者的不同在是否允许在内容中做目录级别的配置
apache
可选支持目录级别的配置,通过.htaccess文件。如果用户在意性能和潜在的安全性问题,完全可以关闭该功能。
在每个内容目录下面都有这个文件,处理请求的时候会先检查这个文件。通常用来实现URL rewrites, access restrictions, authorization and authentication, even caching policies
nginx
不支持目录级别的配置,可以带来性能的提高,安全性的提高这两个好处。
File vs URI-Based Interpretation
怎么处理请求,映射到实际的资源,也是两者不同的地方