Nginx详细使用说明
适配:CentOS / Ubuntu 生产环境,前端反向代理、后端接口转发、静态资源、负载均衡全覆盖。
特点:每一行配置都带详细字段解释,零基础也能看懂
[TOC]
一、Nginx 整体结构说明
Nginx 配置文件分为 4 大核心模块:
-
全局块(main):全局生效,进程、日志、连接数
-
events 块:网络连接模型配置
-
http 块:HTTP 服务全局配置(最核心)
-
server 块:虚拟主机,一个域名一个 server
-
location 块:匹配路由、转发、静态资源
二、完整可直接运行 Nginx 配置(带全字段注释)
# ====================== 1. 全局配置块 ======================
# 指定 Nginx 运行用户,默认 nginx / root
user nginx;
# worker 进程数,一般设置为 CPU核心数
# auto 自动识别CPU核心数
worker_processes auto;
# 错误日志路径 + 日志级别
# 级别:debug|info|notice|warn|error|crit
error_log /var/log/nginx/error.log warn;
# PID 进程号文件存放路径
pid /var/run/nginx.pid;
# ====================== 2. 事件模块 ======================
events {
# 单个worker最大连接数
worker_connections 1024;
# 开启多路复用,提升并发性能
use epoll;
# 允许同时接受多个连接
multi_accept on;
}
# ====================== 3. HTTP 全局模块 ======================
http {
# 引入MIME类型文件,识别静态文件格式
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 开启高效文件传输模式
sendfile on;
# 减少网络报文段数量,提升传输效率
tcp_nopush on;
# 长连接超时时间,客户端多久不操作断开
keepalive_timeout 65;
# 开启gzip压缩,减少带宽占用
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript;
# 日志格式定义
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 /var/log/nginx/access.log main;
# 包含其他子配置文件
include /etc/nginx/conf.d/*.conf;
# ====================== 4. 虚拟主机 Server ======================
server {
# 监听端口
listen 80;
# 绑定域名,多个域名空格隔开
server_name localhost 127.0.0.1;
# 网站根目录
root /usr/share/nginx/html;
# 默认首页文件
index index.html index.htm;
# 开启目录浏览(可选)
autoindex off;
# ====================== 5. 路由匹配 Location ======================
# 根路径匹配
location / {
# 优先尝试文件,再尝试目录,否则返回404
try_files $uri $uri/ /index.html;
}
# 静态资源缓存配置
location ~* \.(jpg|png|gif|js|css|ico)$ {
# 缓存过期时间
expires 7d;
add_header Cache-Control "public";
}
# 接口反向代理示例
location /api/ {
# 转发后端真实接口地址
proxy_pass http://127.0.0.1:8080/;
# 以下为代理必须头部配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 错误页面定制
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
三、逐模块详细字段解释(重点)
1、全局块字段解释
-
user nginx:指定运行Nginx的系统用户,权限隔离,生产不建议root
-
worker_processes auto:工作进程数,auto自动匹配CPU核心,核心越多并发越强
-
error_log 路径 级别:错误日志存储位置,warn级别只记录警告和错误
-
pid:记录Nginx主进程ID的文件,用于启停、重启
2、events 模块字段解释
-
worker_connections 1024:单个进程最大支持1024个并发连接
-
use epoll:使用Linux最高效IO多路复用模型,高并发必备
-
multi_accept on:一次性接收所有就绪连接,提升吞吐量
3、http 全局字段解释
-
include mime.types:引入文件类型对照表,让浏览器识别css/js/png等文件
-
default_type:未知文件默认当做二进制流下载
-
sendfile on:开启零拷贝文件传输,静态资源速度大幅提升
-
tcp_nopush on:攒够数据包再发送,减少网络开销
-
keepalive_timeout 65:长连接保持65秒,避免频繁握手
-
gzip on:开启压缩,文本类资源压缩60%以上
-
log_format main:定义访问日志的输出格式、字段
-
access_log:指定正常访问日志保存路径
-
include *.conf:加载conf.d下所有子配置,方便多站点管理
4、server 虚拟主机字段解释
-
listen 80:当前站点监听80端口
-
server_name:绑定域名,请求域名匹配谁就执行谁的server
-
root:网站静态资源根目录绝对路径
-
index:默认访问主页,按顺序匹配
-
autoindex:是否开启文件夹目录浏览(线上必须关闭)
-
error_page:指定错误码跳转页面
5、location 核心匹配规则 + 字段解释
5.1 location 匹配优先级(从高到低)
-
=精确匹配 -
^~前缀匹配 -
~正则区分大小写 -
~*正则不区分大小写 -
/通用匹配
5.2 常用字段详解
-
try_files $uri $uri/ /index.html:解决Vue/React前端刷新404问题
-
expires 7d:静态文件浏览器缓存7天,减少重复请求
-
proxy_pass:反向代理核心,将请求转发到后端服务地址
5.3 代理头部字段逐行解释(面试必问)
-
proxy_set_header Host $host:把用户请求的域名传给后端
-
proxy_set_header X-Real-IP $remote_addr:传递真实客户端IP
-
proxy_set_header X-Forwarded-For:传递经过的所有代理IP
-
proxy_set_header X-Forwarded-Proto:传递http/https协议类型
四、Nginx 内置常用变量(工作高频)
-
$remote_addr:客户端真实IP
-
$host:当前访问域名
-
$uri:当前请求路由地址
-
$request:完整请求信息
-
$status:HTTP响应状态码 200/404/500
-
$http_user_agent:客户端浏览器/设备信息
-
$http_referer:请求来源地址
五、Nginx 常用命令(运维必备)
# 检查配置是否有误(修改配置必执行)
nginx -t
# 平滑重启(不中断业务)
nginx -s reload
# 停止 Nginx
nginx -s stop
# 查看 Nginx 版本
nginx -v
# 查看详细编译参数
nginx -V
六、常见业务场景模板
6.1 前端Vue项目部署配置
server {
listen 80;
server_name web.xxx.com;
root /opt/web/dist;
index index.html;
# 解决刷新404
location / {
try_files $uri $uri/ /index.html;
}
# 静态缓存
location ~* \.(js|css|png|jpg|svg|ico)$ {
expires 7d;
}
}
6.2 后端接口反向代理配置
server {
listen 80;
server_name api.xxx.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
七、常见报错排查
-
404:路径不对、root目录错误、try_files未配置
-
502:后端服务没启动、端口不通、proxy_pass地址错误
-
504:后端接口超时,可调整 proxy_timeout
-
403:文件权限不足、目录不存在、selinux未关闭
浙公网安备 33010602011771号