Nginx--nginx.conf 配置文件模板
模板
# === 全局块 ===
# 用户组
user nobody;
# 工作进程数
worker_processes 1;
# 日志路径和日志级别
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;
# 设置网络连接序列化
accept_mutex on;
# 一个进程是否同时接收多个网络连接
multi_accept on;
# 事件驱动模型
use epoll;
}
# === http块 ===
http {
# === http全局块 ===
# 文件扩展名与文件类型映射表
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 是否开启服务日志
access_log off;
# 自定义服务日志格式
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;
# 每个进程每次最大传输值
sendfile_max_chunk 100k;
# 长连接超时事件
keepalive_timeout 65;
# 响应客户端的超时事件
send_timeout 75;
# 客户端请求头的区缓冲区大小
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数
client_max_body_size 10m;
# 客户端请求体的缓冲区大小
client_body_buffer_size 128k;
# ---配置http_gzip模块---
# 开启gzip压缩输出,可减少网络传输
gzip on;
# 设置允许压缩的页面最小字节数
gzip_min_length 1k;
# 设置系统获取多少个单位的缓存用于存储gzip的压缩结果数据流
gzip_buffers 4 16k;
# 设置http协议的版本
gzip_http_version 1.0;
# 设置zip压缩比
gzip_comp_level 6;
# 匹配mime类型进行压缩
gzip_types text/plain text/css application/json;
# 设置开启或者关闭后端服务器返回的结果是否压缩
gzip_proxied any;
# 该配置和http头有关系,会在响应头加个vary:Accept-Encoding
gzip_vray on;
# ---配置http_proxy反向代理---
# Nginx跟代理服务器连接超时时间
proxy_connect_timeout 75;
# Nginx与代理服务器两个成功的响应操作之间超时时间
proxy_read_timeout 75;
# Nginx传输文件至代理服务器的超时时间
proxy_send_timeout 100;
# 设置从代理服务器读取并保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
# 设置代理缓冲区大小
proxy_buffers 4 32k;
# 设置高负荷下的缓冲大小
proxy_busy_buffers_size 64k;
# 设置最大临时文件大小,默认1024M
proxy_max_temp_file_size 64k;
# 限制每次写临时文件的大小
proxy_temp_file_write_size 64k;
# 指定临时文件所在的目录
proxy_temp_path proxy_temp;
# 定义tomcat地址
upstream tomcat {
server 192.168.138.100:8888;
}
# === HTTP-server块 ===
server {
# 监听端口
listen 80;
# 监听服务器地址
server_name localhost;
# 每个连接请求上限次数
keepalive_requests 120;
# 字符集
charset utf-8;
# 服务日志所在目录以及日志格式
access_log logs/host.access.log main;
# 错误页
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# === HTTP-server-location块 ===
location / {
# 服务器的默认网站根目录位置
root /usr/share/nginx/html;
# 默认访问的文件名
index index.html;
# 拒绝的IP
deny 192.168.56.21;
deny all;
# 允许的IP
allow 192.168.56.10;
allow all;
}
# 设置响应头
location / {
# 设置允许跨域类型
add_header Access-Control-Allow-Origin * always;
# 是否允许信任证书
add_header Access-Control-Allow-Credentials 'true' always;
# 允许的请求头类型
add_header Access-Control-Allow-Headers * always;
# 设置允许的请求方式
add_header Access-Control-Allow-Methods 'PUT,GET,POST,DELETE,OPTIONS' always;
# 处理OPTIONS请求
if ($request_method = 'OPTIONS') {
return 204;
}
}
# 设置反向代理服务器
location / {
# 反向代理服务器地址
proxy_pass http://192.168.56.23;
# 是否重定向代理服务器地址
proxy_redirect off;
# 设置向代理服务器发送请求时的请求头数据
# cookie
proxy_pass_header Set-Cookie;
# 主机名
proxy_set_header Host $host;
# 真实IP
proxy_set_header X-Real-Ip $remote_addr;
# 表示Http请求端真实IP
proxy_set_header X-Forwarded-For $remote_addr;
}
}
# 配置ssl
server {
# 开启 ssl
ssl on;
# ssl证书路径
ssl_certificate cert.pem;
# ssl证书密钥
ssl_certificate_key cert.key;
# ssl缓存
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# ssl会话票据
ssl_session_tickets off;
# ssl协议版本
ssl_protocols TLSv1.2;
# ssl密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5';
# 开启ssl服务密码套件
ssl_prefer_server_ciphers on;
}
}
全局块
配置影响 nginx 全局
的指令,一般有运行 nginx 服务器的用户组、nginx 进程 pid 存放路径、日志存放路径、配置文件引入、允许生成 worker process 数等
# === 全局块 ===
# 用户组
user nobody;
# 工作进程数
worker_processes 1;
# 日志路径和日志级别
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
# 进程文件路径
pid logs/nginx.pid;
- 用户或用户组默认为 nobody;
- 工作进程数可以设置为CPU的核心数;
- 日志级别有:
debug | info | notice | warn | error | criy | alert | emerg
events块
配置影响 nginx 服务器或与用户的网络连接
。有每个进程的最大连接数、选取哪种事件驱动模型处理连接请求、是否允许同时接收多个网络连接、开启多个网络连接序列化等
# === 全局块 ===
# ...
# === Events块 ===
events {
# 最大连接数
worker_connections 1024;
# 设置网络连接序列化
accept_mutex on;
# 一个进程是否同时接收多个网络连接
multi_accept on;
# 事件驱动模型
use epoll;
}
- 设置网络连接序列化是为了防止惊群现象发生,默认为 on;
- 是否同时接收多个网络连接指令默认值为 off;
- 时间驱动模型的可选项有:
select | poll | kqueue | epoll | resig | /dev/poll | eventport
http块
可以嵌套多个 server 、配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置
。如文件引入、mime-type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数等。
http_全局块
http_全局块-常用配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
# === http全局块-常用配置 ===
# 文件扩展名与文件类型映射表
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 是否开启服务日志
access_log off;
# 自定义服务日志格式
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;
# 每个进程每次最大传输值
sendfile_max_chunk 100k;
# 长连接超时事件
keepalive_timeout 65;
# 响应客户端的超时事件
send_timeout 75;
# 客户端请求头的区缓冲区大小
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数
client_max_body_size 10m;
# 客户端请求体的缓冲区大小
client_body_buffer_size 128k;
}
- 文件扩展名与文件类型映射表在
nginx/conf
下; - 默认文件类型的默认值为
text/plain
; - 是否开启服务日志的默认值为
on
,开启了之后需要配置access_log
路径; - 自定义日志格式的更多变量参考:【Nginx】之常用内置变量
sendfile
指令指定 Nginx 是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载;sendfile_max_chunk
指令的默认为 0,表示不设上限;keeplive_timeout
指令的单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置;长连接在请求大量小文件的时候,可以减少重建连接的开销;但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;send_timeout
指令仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接;- 使用
client_header_buffer_size
指令时,为避免请求 header 过大出现400错误,可以适当设置大一点; - 使用
large_client_header_buffers
指令时,为避免请求header过大出现400错误,可以适当设置大一点
http_全局块-反向代理配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
#......
# ---http全局块-proxy反向代理配置---
# Nginx跟代理服务器连接超时时间
proxy_connect_timeout 75;
# Nginx与代理服务器两个成功的响应操作之间超时时间
proxy_read_timeout 75;
# Nginx传输文件至代理服务器的超时时间
proxy_send_timeout 100;
# 设置从代理服务器读取并保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
# 设置代理缓冲区大小
proxy_buffers 4 32k;
# 设置高负荷下的缓冲大小
proxy_busy_buffers_size 64k;
# 设置最大临时文件大小,默认1024M
proxy_max_temp_file_size 64k;
# 限制每次写临时文件的大小
proxy_temp_file_write_size 64k;
# 指定临时文件所在的目录
proxy_temp_path proxy_temp;
}
proxy_connect-timeout
:表示 Nginx 跟代理服务器连接超时时间;proxy_read_timeout
:表示 Nginx 与代理服务器两个成功的响应操作之间的超时时间;proxy_send_timeout
:表示 Nginx 传输文件至代理服务器的超时时间;proxy_buffer_size
:用于设置从代理服务器读取并保存用户头信息的缓存区大小;proxy_buffers
:设置代理缓冲区大小,Nginx 针对单个连接,缓存来自代理服务器的响应,网页平均在 32k 以下的话,可以设置为 4 32k;proxy_busy_buffers_size
:设置高负荷下的缓冲大小,一般为 proxy_buffers 的两倍;proxy_max_temp_file_size
:当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认为1024M,它与 proxy_cache 没有关系;大于这个值,将从 upstream 服务器传回,设置为 0 禁用;proxy_temp_file_write_size
:当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小;proxy_temp_path
:用于指定临时文件所在的目录
http_全局块-gzip配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
#......
# ---http全局块-gzip模块配置---
# 开启gzip压缩输出,可减少网络传输
gzip on;
# 设置允许压缩的页面最小字节数
gzip_min_length 1k;
# 设置系统获取多少个单位的缓存用于存储gzip的压缩结果数据流
gzip_buffers 4 16k;
# 设置http协议的版本
gzip_http_version 1.0;
# 设置zip压缩比
gzip_comp_level 6;
# 匹配mime类型进行压缩
gzip_types text/plain text/css application/json;
# 设置开启或者关闭后端服务器返回的结果是否压缩
gzip_proxied any;
# 该配置和http头有关系,会在响应头加个vary:Accept-Encoding
gzip_vray on;
}
- gzip:如果设置为 on 则表示开启 gzip 压缩输出,可减少网络传输;
- gzip_min_length:设置允许压缩的页面最小字节数(到达这个大小才进行压缩),页面字节数从 header 头的 content-length 中进行获取。默认值为 20,建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
- gzip_buffers:设置系统获取多少个单位的缓存用于存储 gzip 的压缩结果数据流,4 16k 表示按照原始数据大小以 16k 为单位的4倍进行内存申请;
- gzip_http_version:设置 http 协议的版本,早期的浏览器不支持 gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了 Nginx 的反向代理并启用 gzip 压缩的话就需要加上,而由于末端通信是 http/1.0,故要设置为1.0;
- gzip_comp_level:zip 压缩比,为 1 时,压缩比最小处理速度最快;为 9 时,压缩比最大但处理速度最慢;
- gzip_types:匹配 mime 类型进行压缩,无论是否指定,
text/html
类型总是会被压缩的; - gzip_proxied:设置开启或者关闭后端服务器返回的结果是否压缩,Nginx 作为反向代理的时候启用,匹配的前提是后端服务器必须要返回包含
Via
的 header 头; - gzip_vray:该配置和 http 头有关系,会在响应头加个
Vary: Accept-Encoding
,可以让前端的缓存服务器缓存经过 gzip 压缩的页面,例如:用 Squid 缓存经过 Nginx 压缩的数据
http_server块
监听http服务,配置虚拟主机
的相关参数,一个 HTTP 中可以有多个 server
http_server块-常用配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
#......
# === http_server-常用配置 ===
server {
# 监听端口
listen 80;
# 监听服务器地址
server_name localhost;
# 每个连接请求上限次数
keepalive_requests 120;
# 字符集
charset utf-8;
# 服务日志所在目录以及日志格式
access_log logs/host.access.log main;
# 重定向错误页到静态页
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
- 监听的端口,默认80,小于1024的要以root启动;
- 监听的服务器地址可以是 IP 或者域名,并且可以使用正则表达式进行匹配;
- 日志格式的定义和 http 模块的定义方式相同;
- 错误页的地址为:
server_name + error_page
。
http_server块-ssl证书配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
#......
# === http_server-ssl证书配置 ===
server {
# 开启 ssl
ssl on;
# ssl证书路径
ssl_certificate cert.pem;
# ssl证书密钥
ssl_certificate_key cert.key;
# ssl缓存
ssl_session_cache shared:SSL:1m;
# ssl会话超时时间
ssl_session_timeout 5m;
# ssl会话票据
ssl_session_tickets off;
# ssl协议版本
ssl_protocols TLSv1.2;
# ssl密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5';
# 开启ssl服务密码套件
ssl_prefer_server_ciphers on;
}
}
http_server_location块
配置请求
的路由,以及各种页面的处理情况
http_server_location块-常用配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
# ===http_全局块 ===
#......
# ===http_server块 ===
server {
# ===http_server_location块 ===
location / {
# 服务器的默认网站根目录位置
root /usr/share/nginx/html;
# 默认访问的文件名
index index.html;
# 拒绝的IP
deny 192.168.56.21;
deny all;
# 允许的IP
allow 192.168.56.10;
allow all;
}
}
}
- 紧跟在 location 后面的是 location 模块监听的 url 地址,也就是 location 块的匹配规则,只有匹配正确的地址才会进入该 location 块,可以使用正则表达式进行匹配(
~
表示区分大小写,~*
表示不区分大小写,/
表示全部) root
:定义服务器的默认的默认网站根目录位置,如果 locationURL 匹配的是子目录或文件,root指令没什么作用,一般放在 server 指令里面或者 locationURL 为/
的 location 块下;index
:定义该 location 路径下默认访问的文件名,一般跟 root 的路径放在一起
http_server_location块-响应头配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
# ===http_全局块 ===
#......
# ===http_server块 ===
server {
# ===http_server_location块 ===
location / {
# 设置允许跨域类型
add_header Access-Control-Allow-Origin * always;
# 是否允许信任证书
add_header Access-Control-Allow-Credentials 'true' always;
# 允许的请求头类型
add_header Access-Control-Allow-Headers * always;
# 设置允许的请求方式
add_header Access-Control-Allow-Methods 'PUT,GET,POST,DELETE,OPTIONS' always;
# 处理OPTIONS请求
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
}
- 为了避免出现失效问题,一般在最后面添加
always
; - 允许的请求头类型包括:Origin、X-Requested-With、content-Type、Accept、Authorization、uuid等
http_server_location块-反向代理配置
# === 全局块 ===
#......
# === Events块 ===
events {
#......
}
# === http块 ===
http {
# ===http_全局块 ===
#......
# ===http_server块 ===
server {
# ===http_server_location块 ===
# 设置反向代理服务器
location / {
# 添加反向代理服务器
# 反向代理服务器地址
proxy_pass http://192.168.56.23;
# 是否重定向代理服务器地址
proxy_redirect off;
# 设置向代理服务器发送请求时的请求头数据
# cookie
proxy_pass_header Set-Cookie;
# 主机名
proxy_set_header Host $host;
# 真实IP
proxy_set_header X-Real-Ip $remote_addr;
# 表示Http请求端真实IP
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人