阅读 56

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.

简单来说:

Nginx是一个Web服务器。

Nginx与其他服务器对比

Ngix的特点

  • 高性能:

事件驱动的架构:能够并发处理百万级别的TCP连接。

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

极少的进程间切换。

  • 模块化:

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

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

  • 跨平台:

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

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