nginx在启动后,会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程,worker进程以非root用户运行,可以在配置文件中配置运行worker进程的用户。
master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控 worker 进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求
/usr/local/nginx
├── client_body_temp # POST大文件暂存目录
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── fastcgi_params # fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types # 媒体类型
│ ├── mime.types.default
│ ├── nginx.conf #这是Nginx默认的主配置文件,日常使用和修改的文件
│ ├── nginx.conf.default
│ ├── scgi_params # scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params # uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html
│ └── index.html
├── logs # Nginx日志目录
│ ├── access.log
│ ├── error.log
│ └── nginx.pid
├── proxy_temp # 临时目录
├── sbin # Nginx 可执行文件目录
│ └── nginx
├── scgi_temp
└── uwsgi_temp
Nginx主配置文件/usr/local/nginx/confnginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束。
主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。默认配置如下:
user root; #进程用户
worker_processes 1; #工作进程,配合和CPU个数保持一致
#error_log logs/error.log; #错误日志路径及级别
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #Nginx服务启动的pid
主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个worker process可以同时支持的最大连接数等。默认配置如下:
events {
worker_connections 1024; #每个worker进程支持的最大连接数
#use epoll; #内核模型,select、poll、epol
}
主要包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。默认配置如下:
http {
include mime.types; #指定在当前文件中包含另一个文件的指令
default_type application/octet-stream; #指定默认处理的文件类型可以是二进制
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #日志格式
#access_log logs/access.log main; #访问日志
sendfile on; #优化静态资源
#tcp_nopush on; #nginx不要缓存数据,而是一段一段发送
#keepalive_timeout 0;
keepalive_timeout 65; #给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。
#gzip on; #压缩
}
Server块也被叫做“虚拟主机”部分,它描述的是一组根据不同server_name指令逻辑分割的资源,这些虚拟服务器响应HTTP请求,因此都包含在http部分。最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。一个server块可以配置多个location 块。基本配置如下:
server {
listen 80; #监听端口,默认80
server_name localhost; #提供服务的域名或主机名
#charset koi8-r;
#access_log logs/host.access.log main;
location / { #控制网站访问路径
root /root/www; #存放网站的路径
index index.html index.htm; #默认访问的首页
}
#error_page 404 /404.html; #错误页面
error_page 500 502 503 504 /50x.html; #定义请求错误,指定错误代码
location = /50x.html {
root html;
}
}
日志使用用来进行数据统计、问题排错的重要手段。nginx日志相关涉及的配置有:
访问日志主要记录客户端的请求,客户端向Nginx服务器发起的每一次请求都记录在这里,基本语法如下:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off; # 关闭访问日志
默认值: access_log logs/access.log combined
作用域:http、server、location
可以使用log_format来自定义日志格式,具体语法如下:
log_format name [escape=default|json] string ...;
默认值: log_format combined “……”
作用域: http、server
该配置记录服务器和请求处理过程中的错误信息,语法如下:
rewrite_log on | off;
默认值:error_log logs/error.log error
作用域:main、http、mail、stream、server、location
user root;
worker_processes 1;
error_log /var/logs/nginx/error.log;
error_log /var/logs/nginx/error.log notice;
error_log /var/logs/nginx/error.log info; #错误日志
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; #日志格式化
access_log /var/logs/nginx/access.log main; #接受日志
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /root/www;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}