nginx处理web请求机制解析
###worker抢占机制 worker进程抢占accept_mutex互斥锁,谁先抢到,谁与client建立连接 ###传统服务器事件处理 客户端与worker进程连接并阻塞时,其他的请求会等待第一个请求处理完毕才可以被执行。 ###Nginx事件处理 nginx的worker进程是异步非阻塞的通信模式,类似于多路复用器的模式,所以当第一个请求被阻塞时,也可以同事处理接下来的其他请求(use epoll, linux的epoll模型,可以同时处理6-8万个请求) ###配置nginx的最大连接数 在nginx.conf配置文件内
events {
# 默认使用epoll
use epoll;
# 每个worker允许连接的客户端最大连接数
worker_connections 1024;
}
###nginx.conf配置结构
- main 全局配置
- event 配置工作模式以及连接数
- sendfile on; 使用高效文件传输,提升传输性能
- tcp_nopush on; sendfile启用后才能使用,是指当数据表积累一定大小后才发送,提高了效率
- keepalive_timeout 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的链接,节约资源损耗:keepalive_timeout 65;
- gzip on; gzip启用压缩,html/css压缩后传输更快
- http http模块相关配置
- server 虚拟主机模块
- listen 监听端口
- server_name localhost、IP、域名
- location 请求路由映射,匹配拦截
- root 请求位置
- index 首页设置
- location 路由规则,表达式
- upstream 集群,内网服务器
- server 虚拟主机模块
###设定日志格式,main为定义的格式名称,如此access_log就可以直接使用这个变量了
参数名 | 参数意义 |
---|---|
$remote_addr | 客户端IP |
$remote_user | 远程客户端用户名,一般为:’-’ |
$time_local | 时间和时区 |
$request | 请求的URL以及method |
$status | 响应状态码 |
$body_bytes_send | 响应客户端内容字节数 |
$http_referer | 记录用户从哪个链接跳转过来的 |
$http_user_agent | 用户所使用的代理,一般来时都是浏览器 |
http_x_forwarded_for | 通过代理服务器来记录客户端的IP |
####日志配置格式
error_log [日志文件路径] [日志级别:notice|info]
#####日志级别(由低到高)
- debug
- info
- notice
- warn
- error
- crit