Nginx实用指南

Nginx实用指南

Nginx是什么?

官网介绍: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

Nginx与其余服务器对比

Ngix的特色

  • 高性能:

事件驱动的架构:可以并发处理百万级别的TCP链接。数据库

全异步的网络I/O处理机制。缓存

极少的进程间切换。安全

  • 模块化:

高度模块化的设计和自由的许可证。bash

使得扩展Nginx功能的第三方模块层出不穷。服务器

  • 跨平台:

Linux:(sendfile、epoll) Nginx支持其独有的sendfile系统调用。这个系统调用能够高效地把硬盘中的数据发送到网络上(不须要先把硬盘数据复制到用户态内存上再发送),这极大地减小了内核态与用户态数据间的复制动做。 epoll是Linux上处理大并发网络链接的利器。cookie

Nginx的进程

多进程的好处:

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缓存

经过配置缓存,能够大大下降服务器的压力,提升响应速度。

Nginx设置静态资源缓存:

location ~ \.(gif | jpg | jpeg | png | bmp | swf | ico)$ {      root   /www/local/static;
    expires 30d;}
复制代码

当指定时间时,可使用的单位包括:

  • ms(毫秒)
  • s(秒)
  • m(分钟)
  • h(小时)
  • d(天)
  • w(周,包含7天)
  • M(月,包含30天)
  • y(年,包含365天)

Nginx反向代理与负载均衡

Nginx提供了3种负载均衡策略:

负载均衡的配置以下:

服务器集群Session共享问题的解决方案:

  1. 不使用session,换用cookie
  • 优势:实现起来简单,方便,也不会加大数据库的负担
  • 缺点:依赖客户端、cookie可复制
  1. session存在数据库中

MySQL等关系型数据库:

  • 优势:安全性比cookie高不少
  • 缺点:加大数据库的IO,增长数据库的负担,请求量较高时体验很差

redis 或者 memcache 中:

  • 优势:安全性比cookie高不少,比从文件中读取要快不少
  • 缺点:会产生内存碎片,若是存储块不足,还会产生内存溢出。


Wechat-westcall
相关文章
相关标签/搜索