众所周知,Nginx性能高,而Nginx的高性能与其架构是分不开的。那么Nginx究竟是怎么样的呢?
Nginx在启动后,在UNIX系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。我们也可以手动地关掉后台模式,让nginx在前台运行,并且通过配置让nginx取消master进程,从而可以使nginx以单进程方式运行。很显然,生产环境下我们肯定不会这么做,所以关闭后台模式,一般是用来调试用的。所以,我们可以看到,Nginx是以多进程的方式来工作的,当然Nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是Nginx的默认方式。Nginx采用多进程的方式有诸多好处,所以我就主要讲解Nginx的多进程模式吧。
刚才讲到,Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器CPU核数一致,这里面的原因与Nginx的进程模型以及事件处理模型是分不开的。
Nginx配置的基本方法
首先分析一下nginx.conf原始配置文件来介绍配置的基本方法。
# 以下内容是全局块
#user nobody;
worker_processes 8;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
# 以下内容是events块
events {
worker_connections 1024;
}
# 以下内容是http块
http {
# 以下内容是http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
upstream backend {
#ip_hash;
server 192.168.1.251 weight&#