很多小伙伴刚接触Nginx时,面对密密麻麻的配置文件一脸懵,不知道每一行指令的作用、该改哪里、不同场景该怎么配置。
今天这篇博文,从零拆解Nginx配置文件整体结构、核心高频指令、实战配置案例,涵盖静态服务、反向代理、缓存优化、日志配置等常用场景,指令附带详细参数说明,看完直接上手配置、排查问题。
先划重点:Nginx配置文件核心由全局块、events块、http块、server块、location块五层结构组成,所有指令都各司其职,层级分明,不会乱生效。
一、Nginx配置整体层级结构
先看懂结构,再学指令,效率翻倍,完整层级如下:
# 1. 全局块:全局生效,控制Nginx整体运行
# 2. events块:控制网络连接相关配置
events {}
# 3. http块:HTTP服务核心配置,包含所有网站服务
http {
# 全局HTTP配置(文件类型、日志、性能参数等)
# 4. server块:单个站点/虚拟主机配置,一个http可包含多个server
server {
# 站点监听、域名、根目录配置
# 5. location块:匹配请求路径,控制具体请求处理规则
location / {}
}
}
二、全局块核心指令(全局生效)
全局块指令作用于整个Nginx进程,无需嵌套其他块,优先级最高。
1. user 运行用户
指令作用:定义Nginx工作进程的运行用户/用户组,控制文件访问权限,保障服务安全。
语法:user 用户名 [用户组];
示例:
user www-data;
说明:默认root,生产环境建议使用低权限用户,避免权限过高引发安全风险。
2. worker_processes 工作进程数
指令作用:设置Nginx工作进程数量,是性能优化核心参数。
语法:worker_processes 数字/auto;
示例:
worker_processes auto;
说明:auto 自动匹配CPU核心数,单核CPU设1,多核设核心数,最大化利用服务器性能。
3. error_log 错误日志
指令作用:定义错误日志存储路径和日志级别,用于排查启动、运行报错。
语法:error_log 日志路径 日志级别;
日志级别(从低到高):debug、info、notice、warn、error、crit
示例:
error_log /var/log/nginx/error.log error;
说明:只记录错误及严重级别日志,减少日志磁盘占用。
4. pid 进程文件
指令作用:指定Nginx进程PID文件存储路径,用于进程启停、管理。
示例:
pid /run/nginx.pid;
三、events块核心指令(连接配置)
events块专属指令,控制Nginx客户端连接、并发参数,直接影响服务并发能力。
1. worker_connections 最大连接数
指令作用:单个工作进程支持的最大客户端连接数。
示例:
events {
worker_connections 1024;
}
说明:Nginx最大并发数 = 工作进程数 × 单进程连接数,默认1024,高并发场景可适当调大。
2. use epoll 事件模型
指令作用:指定Linux高效事件驱动模型,提升并发处理效率。
示例:
use epoll;
说明:Linux系统默认推荐,Windows使用select,无需手动修改。
四、http块核心指令(全局HTTP服务)
http块是Nginx网页服务核心,所有站点通用配置写在此处,全局生效。
1. include 引入配置文件
指令作用:导入外部配置文件,实现配置拆分、统一管理。
示例:
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;
说明:mime.types 定义文件MIME类型,解决网页资源解析异常;conf.d 目录可存放多个站点配置,解耦配置。
2. default_type 默认文件类型
指令作用:设置无法识别文件的默认MIME类型。
示例:
default_type application/octet-stream;
说明:默认二进制流,浏览器无法识别时自动触发下载。
3. sendfile 高效文件传输
指令作用:开启Linux sendfile机制,减少系统调用,提升静态文件传输速度。
示例:
sendfile on;
# 开启tcp高效推送
tcp_nopush on;
说明:静态资源服务必开,大幅优化图片、JS、CSS加载速度。
4. keepalive_timeout 长连接超时
指令作用:设置客户端长连接保持时间,减少重复建立连接开销。
示例:
keepalive_timeout 65s;
说明:65秒内同一客户端重复请求无需重新握手,提升访问速度。
5. access_log 访问日志
指令作用:记录所有客户端访问请求,用于流量统计、接口排查。
示例:
access_log /var/log/nginx/access.log main;
五、server块核心指令(单站点配置)
一个server块对应一个虚拟站点,可通过多server实现多域名、多站点共存。
1. listen 监听端口
指令作用:设置站点监听的端口号,支持IP+端口、纯端口配置。
语法:listen 端口; / listen IP:端口;
示例:
listen 80;
listen 443 ssl; # HTTPS端口
2. server_name 绑定域名
指令作用:绑定站点域名,支持单域名、多域名、泛域名。
示例:
server_name www.xxx.com xxx.com;
server_name *.xxx.com; # 泛域名
说明:域名和端口匹配成功后,当前server块生效。
3. root 站点根目录
指令作用:指定网站静态资源、文件的根存储路径。
示例:
root /usr/share/nginx/html;
4. index 默认首页
指令作用:设置访问站点默认加载的首页文件,按顺序匹配。
示例:
index index.html index.htm index.php;
说明:优先加载index.html,不存在则加载index.htm,依次类推。
六、location块核心指令(请求匹配规则)
location是最常用、最重要的配置块,用于匹配客户端请求路径,实现反向代理、静态缓存、路由跳转等核心功能。
1. 匹配规则优先级
精准匹配 > 正则匹配 > 前缀匹配 > 通用匹配(/)
- =:精准匹配
- ~:区分大小写正则匹配
- ~*:不区分大小写正则匹配
- ^~:前缀优先匹配
- /:默认通用匹配
2. proxy_pass 反向代理核心指令
指令作用:将客户端请求转发至后端服务(Tomcat、Node、SpringBoot等),是反向代理、负载均衡核心。
示例:
location /api/ {
proxy_pass http://127.0.0.1:8080/; # 转发至后端8080服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
}
3. expires 静态资源缓存
指令作用:设置客户端浏览器缓存过期时间,减少重复请求,提升访问速度。
示例:
# 图片、视频、静态文件缓存30天
location ~* \.(jpg|png|css|js|mp4|ico)$ {
expires 30d;
add_header Cache-Control public; # 允许公共缓存
access_log off; # 关闭静态资源日志,减少IO压力
}
4. return 重定向跳转
指令作用:实现URL重定向、跳转,支持301永久重定向、302临时重定向。
示例:
# 所有HTTP请求跳转HTTPS
location / {
return 301 https://$host$request_uri;
}
5. deny/allow 访问权限控制
指令作用:黑白名单控制,禁止/允许指定IP访问。
示例:
# 禁止所有IP访问后台路径
location /admin/ {
deny all;
}
七、高频拓展指令(缓存、负载、HTTPS)
1. 代理缓存指令
用于缓存后端接口响应数据,减轻后端服务压力:
http {
# 定义缓存目录、大小、过期时间
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
server {
location /api/ {
proxy_cache my_cache; # 启用缓存
proxy_cache_valid 200 304 2m; # 200/304状态码缓存2分钟
proxy_cache_valid 404 1m; # 404页面缓存1分钟
}
}
}
2. HTTPS核心指令
用于配置网站SSL证书,实现HTTPS访问:
server {
listen 443 ssl;
server_name www.xxx.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/xxx.pem;
ssl_certificate_key /etc/nginx/ssl/xxx.key;
ssl_protocols TLS1.2 TLS1.3; # 启用安全协议
}
八、Nginx配置常用命令
配置修改后必用命令,避免配置报错、服务异常:
# 检查配置文件语法是否正确
nginx -t
# 平滑重启(不中断服务,生效新配置)
nginx -s reload
# 停止服务
nginx -s stop
# 查看Nginx运行状态
systemctl status nginx
九、总结
1. Nginx配置遵循层级生效原则:全局→events→http→server→location,下级可覆盖上级配置;
2. 核心高频场景:静态资源托管、反向代理、端口监听、域名绑定、缓存优化、重定向跳转,掌握以上指令可覆盖90%日常开发需求;
3. 所有配置修改后,务必先 nginx -t 校验语法,再平滑重启,避免线上服务中断。
后续会持续更新Nginx负载均衡、防盗链、限流、高并发优化配置,需要的小伙伴可以收藏关注!