1、概念介绍
Nginx ("engine x") 是一个轻量级、高性能的 WEB 服务器软件和反向代理服务器。
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx 以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是 Nginx 并不支持 cgi 方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用 FastCGI 方式来执行 PHP 程序。
由于 Nginx 本身的一些优点,轻量,开源,易用,越来越多的公司使用 nginx 作为自己公司的 web 应用服务器。
正向代理
正向代理:用于代理内部网络对 Internet 的连接请求(如 VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标 Web 服务器的 HTTP 请求先发送到代理服务器上, 然后由代理服务器去访问 Web 服务器, 并将 Web 服务器的 Response 回传给客户端。
通过代理服务器来访问服务器的过程就叫正向代理。需要在客户端配置代理服务器进行指定网站访问。
反向代理
反向代理:以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web 服务器(可能是 apache、nginx、tomcat、iis 等),并将从 web 服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用:
- 保护网站安全:任何来自 Internet 的请求都必须先经过代理服务器
- 加速 Web 请求:可以缓存真实 Web 服务器上的某些静态资源,减轻真实 Web 服务器的负载压力
- 现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力
负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
Nginx VS Apache
Nginx 优点 | Apache 优点 |
轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 | apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache。 |
抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的, 负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持 低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,而拒绝服务的现象。 | 动态页面,Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用,一般动态请求要 apache 去做,nginx 适合静态请求和反向代理。 |
nginx 处理静态文件好,静态处理性能比 apache 高三倍以上 | apache 更为成熟,少 bug ,nginx 的 bug 相对较多。 |
nginx 的设计高度模块化,编写模块相对简单 | apache 超稳定。 |
nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 。 | apache 对 PHP 支持比较简单,nginx 需要配合其他后端用。 |
nginx 作为负载均衡服务器,支持 7 层负载均衡 | |
nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器 | apache 发展到现在,模块超多,基本想到的都可以找到。 |
启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级 。 | apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区 |
社区活跃,各种高性能模块出品迅速 |
对 web server 的需求决定你的选择。大部分情况下 nginx 都优于 APACHE,比如说静态文件处理、PHP-CGI 的支持、反向代理功能、前端 Cache、维持连接等等,Nginx 并发性比较好,CPU 内存占用低。
在 Apache+PHP模式下,如果 PHP 处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。Apache在处理动态有优势,如果 rewrite 频繁,那还是 Apache比较好。