NGINX 简介
Nginx的特性:
模块化设计、较好扩展性
高可靠性
master-->worker
低内存消耗
10000个keep-alive非活动连接在Nginx仅消耗2.5MB,支持event-driven,aio,mmap
支持热部署
不停机而更新配置文件、更换日志文件、更新服务器程序版本
基本功能:
静态资源的web服务器,能缓存打开的文件描述符
http, smtp, pop3协议的反向代理服务器,缓存、负载均衡;
支持FastCGI (fpm),uWSGI等协议的反代;
模块化,非DSO(动态共享对象)机制,过滤器zip,SSI及图像大小调整;
支持SSL
扩展功能:
基于名称和IP的虚拟主机;
支持keepalive
支持平滑升级
定制访问日志 ,支持使用日志缓冲区提高日志存储性能
支持url rewrite
支持路径别名
支持基于IP及用户的访问控制
支持速率限制,支持并发数限制
Nginx的基本架构:
master/worker
一个master进程,生成一个或多个worker,一个worker进程通过事件驱动机制响应多个请求。
master:加载配置文件、管理worker进程、平滑升级。。。
worker:http服务、http代理、fastcgi代理
进程复用: epoll, kqueue, /dev/poll (event ports) ,select, poll,,rt signals
磁盘io:支持AIO,Advanced IO,sendfile,,sendfile64,nmap(内存映射机制:文件的路径映射到内存中,访问它可以直接访问文件)
worker负责接收http请求,如果使用缓存功能的话还负责从缓存加载数据直接响应,如果要访问后端主机的话,则通过相关反代模块访问后端主机。worker中包含模块分为核心模块、标准模块和第三方模块,不同的模块可以和不同的后端主机相连,HTTP通过ht_core模块,PHP通过fastcgi模块,memcache通过memcache模块等等。
1、Nginx和Apache相比优点:
轻量级:同样起web服务,比apache占用更少的内存及资源;
抗并发:nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能;
高度模块化的设计:编写模块相对简单;
社区活跃:各种高性能模块出品迅速。
2、Nginx作为Web服务器:
相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率。
Nginx作为负载均衡服务器:
Nginx既可以在内部直接支持Rails和PHP程序对外进行服务, 也可以支持作为HTTP代理服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都不错。
Nginx作为邮件代理服务器:
Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。
Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级。
3、Nginx配置简洁,Apache复杂:
Nginx静态处理性能比Apache高3倍以上;
Apache对PHP支持比较简单,Nginx需要配合其他后端(php-fpm或者fastcgi);
Apache的组件比Nginx多。
4、Nginx与Apache最核心的区别:
在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
5、nginx处理静态文件好,耗费内存少:
apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx做前端,后端用apache。大型网站建议用nginx自带的集群功能。
6、从使用情况来看:
nginx的负载能力比apache高很多。Nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。
7、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
8、Nginx优于apache的主要两点:
1.Nginx本身就是一个反向代理服务器;
2.Nginx支持7层负载均衡,Nginx可能会比apache支持更高的并发。
10、你对web server的需求决定你的选择。大部分情况下Nginx都优于Apache,比如说静态文件处理PHP-CGI的支持、反向代理功能、前端apache、维持连接等等。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
11、可以看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物。
12、对于nginx,它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器
13、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。