1.配置文件结构
从整体结构上看,Nginx的配置文件主要由main、events、http、server、location五个模块组成。其中,server块嵌套在http块内,location块嵌套在server块内,对于嵌套块中的指令,其执行顺序为从外至内。
main
events {...}
http {
server {
location {...}
}
}
模块 | 说明 |
---|---|
main | 用来配置Nginx工作进程所属的用户和用户组、工作进程数量、错误日志位置与级别、pid位置、工作进程的优先级等 |
events | 用来配置Nginx的工作模式和并发量 |
http | 用来配置Nginx处理http请求 |
server | 用来配置Nginx中的虚拟主机 |
location | 用来做模式匹配,可以根据用户请求的URI来执行不同的操作 |
1.1 main模块
指令详解:
# 工作进程所属用户
user www-data;
# 工作进程数量,一般为CPU核数或者CPU核数的2倍
worker_processes 4;
# 主进程pid的存储位置
pid /run/nginx.pid;
1.2 events模块
指令详解:
events {
# 设置事件模型,epoll是多路复用中的一种方式,仅用于Linux2.6以上的内核
use epoll;
# 单个工作进程的最大并发连接数,与服务器内存大小有关。
worker_connections 1024;
# 该配置项使得工作进程在获得新连接通知时,立即接受所有连接,放入监听队列
multi_accept on;
}
1.3 http模块
http模块可以包含多个server模块,server模块又可以包含多个location模块!除了server模块和location模块外,还包含http全局块,用来配置Nginx日志、超时控制、反向代理等。
http全局块指令详解:
http {
# mime.types文件是MIME文件类型和文件扩展名的映射。在Nginx返回的响应报文中,
# 通过Content-type字段告知浏览器返回的文件类型,而浏览器就可以调用相应的应用
# 程序为用户展示数据。
include mime.types;
# Nginx默认返回的文件类型
default_type application/octet-stream;
# 开启高效的文件传输模式(暂时还不理解这个配置)
sendfile on;
#+++++++++#
#+日志配置+#
#+++++++++#
# 设定日志格式
log_format main
'[$time_local] $remote_addr - $remote_user '
'"$request" $request_length $request_time $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
# 设置Nginx访问日志
access_log /data/nginx/logs/nginx_access.log main;
# 设置Nginx错误日志
error_log /data/nginx/logs/nginx_error.log;
#+++++++++#
#+超时控制+#
#+++++++++#
# 设置长连接的保持时间,相当于保活定时器,Nginx默认为75s,一般可设为60s,
# 若设为0,则禁止长连接。
keepalived_timeout 60;
# 客户端与服务端建立连接后,客户端发送完整的请求头的超时时间,会受请求头长度和
# 网络状况的影响。Nginx默认为60s,若指定时间内,客户端未发送完请求头,则Nginx
# 返回408错误,即Request Time Out 。
client_header_timeout 10;
# 客户端与服务端建立连接后,客户端发送请求体的超时时间,会受请求体长度和网络状况
# 的影响,在文件上传服务中,可能需要将此参数的值调大。Nginx默认为60s,若指定时间
# 内,客户端未发送完请求体,则Nginx返回408错误。
client_body_timeout 20;
#+++++++++++++++++++++#
#+请求头、请求体大小限制+#
#+++++++++++++++++++++#
# client_header_buffer_size指令用来分配一个buffer来容纳客户端的请求行和请求头,默认
# 为1k;large_client_header_buffers 指令用来规定容纳客户端请求行和请求头的最大buffer
# 数量和大小,默认最大数量为4个,大小为4k。
# Nginx首先根据client_header_buffer_size配置的值来分配buffer,如果buffer过小,那么再
# 次根据large_client_header_buffers 配置的值来分配large_buffer,如果large_buffer还是过
# 小,则返回414错误(Request-URI Too Large)或者400错误(Bad Request)。
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# client_body_buffer_size指令用来配置请求体缓冲区的大小,默认为32k;
# client_max_body_size指令用来配置请求体缓冲区的最大值,默认为1m;对于文件上传服
# 务器来说,client_max_body_size的配置十分重要。
client_body_buffer_size 32k;
client_max_body_size 1m;
#+++++++++#
#+Gzip压缩+#
#+++++++++#
# Gzip是页面压缩技术,其作用是对服务端返回的页面进行压缩,以减小页面的体积,提高
# 浏览器对页面的加载速率。一般情况下,对于js、css、jpg、jepg、png、gif这样的静
# 态文件需要开启Gzip压缩技术。
# 开启gzip压缩
gzip on;
# 设置允许压缩的页面的最小字节数,默认为1k;页面大小可以从响应头的Content-Length
# 中获取。
gzip_min_length 1k;
# 配置压缩页面的缓冲区数量以及单个缓冲区的大小,默认为内存的一个页的大小。
gzip_buffers 4 4k;
# 允许Gzip压缩的文件类型
gzip_types text/plain application/javascript text/css image/jpeg image/png image/gif;
# 压缩级别,取值范围[1-9],默认为1,一般设为4或4;其值越大,压缩率越大,但是
# 消耗的CPU时间越长。
gzip_comp_level 4;
# 指定允许的HTTP版本号,默认为1.1
gzip_http_version 1.1;
}
日志格式参数说明:
参数 | 说明 | 示例 |
---|---|---|
$time_local | 本地时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$remote_addr | 客户端IP地址 | 211.71.72.69 |
$remote_user | 客户端名称 | - |
$request | 请求方式、请求的URI、HTTP协议版本 | "GET /article-10000.html HTTP/1.1" |
$request_length | 请求的长度,包括行、头、体 | |
$request_time | 请求处理时间,单位s,指从读取客户端第一个字节开始,直到将最后一个字节内容返回给客户端 | |
$status | 服务端返回的状态码 | 200 |
$body_bytes_sent | 服务端返回的内容大小,不包括响应行、响应头,单位字节 | 1547 |
$http_referer | URL跳转来源 | https://www.baidu.com/ |
$http_user_agent | 客户端浏览器信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;" |
网友评论