1. nginx进程模型:
master进程:主进程,管理worker,接收来自外界的信号分发给worker
worker进程:工作进程,处理客户端的请求,每个worker进程默认连接数为1024;默认只起一个工作进程;可在配置文件中修改
2. nginx.conf配置结构:
{
main: 全局配置
event: 配置工作模式及连接数
http : http模块相关配置{
server: 虚拟主机配置 {
location: 路由配置
upstream: 集群配置
}
}
}
2.1 全局配置:
#user nobody;
表示以操作系统哪一个用户去启动worker进程;如图可以看到nginx启动了一个master,一个worker进程,worker进程是nobody用户启动worker_processes 1;
用于配置worker进程个数
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
配置错误日志的位置和日志级别
2.2 event块
events {
worker_connections 1024;
}
配置了一个worker的最大连接数
2.3 http块
include mime.types;
用于引入文件 #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;
#keepalive_timeout 0;
keepalive_timeout 65;
sendfile: nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
tcp_nopush: 设置tcp的psh标志位?
keepalive: 长连接超时时间,单位是秒
2.4 server块:
server块用于配置虚拟主机,从用户角度来看,一台虚拟主机和一台独立的硬件主机是完全一样的。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,对多个网站提供服务。
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
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;
}
}
listen用于监听指定ip:port的连接
listen 127.0.0.1:8000; #只监听来自127.0.0.1这个IP,请求8000端口的请求
listen 127.0.0.1; #只监听来自127.0.0.1这个IP,请求80端口的请求(不指定端口,默认80)
listen 8000; #监听来自所有IP,请求8000端口的请求
server_name用于指定虚拟主机名称,可以配多个 空格区分
2.5 location块:
语法结构:
location [ = | ~ | ~* | ^~ ] uri { ... }
uri用于与请求url(除开虚拟主机名)进行匹配的字符串
- 在不添加此选项时,Nginx服务器首先在server块的多个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,服务器再用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理此请求;如果正则匹配全部失败,就使用刚才记录的匹配度最高的location块处理此请求。
- “=”,用于标准uri前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求。
- “^~”,用于标准uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
- “~”,用于表示uri包含正则表达式,并且区分大小写。
- “~* ”,用于表示uri包含正则表达式,并且不区分大小写。注意如果uri包含正则表达式,就必须要使用“~”或者“~*”标识。
root:用于设置请求寻找资源的跟目录
3. nginx常用命令:
nginx -s stop: 直接暴力关闭nginx
nginx -s quit: 不在接收新的连接,正在使用中的连接断开后,关闭nginx,仅针对http
nginx -t: 检查配置文件语法
nginx -V: 查看版本和其他信息
nginx -s reload: 重新加载配置文件