官网介绍:nginx
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.git
简单来讲:github
Nginx是一个Web服务器。redis
事件驱动的架构:可以并发处理百万级别的TCP链接。数据库
全异步的网络I/O处理机制。缓存
极少的进程间切换。安全
高度模块化的设计和自由的许可证。bash
使得扩展Nginx功能的第三方模块层出不穷。服务器
Linux:(sendfile、epoll) Nginx支持其独有的sendfile系统调用。这个系统调用能够高效地把硬盘中的数据发送到网络上(不须要先把硬盘数据复制到用户态内存上再发送),这极大地减小了内核态与用户态数据间的复制动做。 epoll是Linux上处理大并发网络链接的利器。cookie
多进程的好处:
master只用于管理真正提供服务的worker进程,因此master进程能够是惟一的,它仅专一于本身的纯管理工做,为管理员提供命令行服务,包括诸如启动服务、中止服务、重载配置文件、平滑升级程序等。master进程须要拥有较大的权限,例如,一般会利用root用户启动master进程。worker进程的权限要小于或等于master进程,这样master进程才能够彻底地管理worker进程。
当任意一个worker进程出现错误从而致使coredump时,master进程会马上启动新的worker进程继续服务。
多个worker进程处理互联网请求不但能够提升服务的健壮性(一个worker进程出错后,其余worker进程仍然能够正常提供服务),最重要的是,这样能够充分利用如今常见的SMP多核架构,从而实现微观上真正的多核并发处理。所以,用一个进程(master进程)来处理互联网请求确定是不合适的。
另外,为何要把worker进程数量设置得与CPU核心数量一致呢?这正是Nginx与Apache服务器的不一样之处。在Apache上每一个进程在一个时刻只处理一个请求,所以,若是但愿Web服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,一般会达到一台服务器拥有几百个工做进程,这样大量的进程间切换将带来无谓的系统资源消耗。而Nginx则否则,一个worker进程能够同时处理的请求数只受限于内存大小,并且在架构设计上,不一样的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程一般不会进入睡眠状态,所以,当Nginx上的进程数与CPU核心数相等时(最好每个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。
nginx.conf配置master/worker:
是否以master/worker方式工做: 语法:master_process on|off; 默认:master_process on;
worker进程数的配置: 语法:worker_processes number; 默认:worker_processes 1;
设置每一个worker的链接数: events { worker_connections 1024; }
经过配置缓存,能够大大下降服务器的压力,提升响应速度。
Nginx设置静态资源缓存:
location ~ \.(gif | jpg | jpeg | png | bmp | swf | ico)$ { root /www/local/static;
expires 30d;}
复制代码
当指定时间时,可使用的单位包括:
Nginx提供了3种负载均衡策略:
负载均衡的配置以下:
服务器集群Session共享问题的解决方案:
MySQL等关系型数据库:
redis 或者 memcache 中: