Nginx 的核心配置文件 nginx.conf 决定了服务的全局行为、连接处理、HTTP 服务、路由转发、负载均衡等所有核心功能。配置文件采用分层指令块结构,语法简洁且扩展性极强
Nginx 配置采用层级嵌套结构,指令以分号 ; 结尾,指令块用 {} 包裹,遵循全局生效 > 局部覆盖的规则。核心层级从外到内依次为:
全局块:全局生效,配置 Nginx 进程、用户、日志等基础参数
events 块:配置网络连接、事件模型,影响并发性能
http 块:HTTP 服务核心配置,可包含多个 server、upstream 块
upstream 块:定义后端服务器集群,实现负载均衡
server 块:定义虚拟主机,对应一个域名 / 端口服务
location 块:匹配请求 URL,定义路由处理规则
全局块位于配置文件最顶部,配置对整个 Nginx 实例生效的参数,无嵌套指令块。
# 运行 Nginx 的用户/用户组
user nginx;
# 工作进程数,auto 表示自动匹配 CPU 核心数(最优配置)
worker_processes auto;
# 错误日志路径 + 日志级别(debug/info/warn/error/crit)
error_log /var/log/nginx/error.log info;
# Nginx 主进程 PID 文件存放路径
pid /var/run/nginx.pid;
# 单个进程最大打开文件数(高并发必备)
worker_rlimit_nofile 65535;user:指定 Nginx 运行权限,避免使用 root 用户提升安全性
worker_processes auto:官方推荐配置,性能最优
worker_rlimit_nofile:解决高并发下「too many open files」报错
events 块专门配置网络连接处理机制,是 Nginx 高并发的核心配置,仅能存在一个。
events {
# 单个 worker 进程支持的最大并发连接数
worker_connections 10240;
# 使用 epoll 事件驱动模型(Linux 高并发最优选择)
use epoll;
# 单个 worker 进程一次性接收所有新连接
multi_accept on;
# 关闭连接互斥锁(多核 CPU 建议关闭,提升性能)
accept_mutex off;
}worker_connections:理论最大并发数 = worker 进程数 × 该值
use epoll:Linux 系统默认最优模型,无需手动修改
multi_accept on:单进程批量接受连接
http 是 Nginx 最核心的配置块,所有 Web 服务、代理、缓存、日志相关配置都在此定义,内部可嵌套多个 server 和 upstream。
http {
# 引入 MIME 类型配置文件
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 自定义访问日志格式
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;
# 开启零拷贝技术,提升静态资源传输效率
sendfile on;
# 网络数据包优化
tcp_nopush on;
tcp_nodelay on;
# 长连接超时时间(秒)
keepalive_timeout 65;
# sendfile 单次传输最大数据块
sendfile_max_chunk 100k;
# 上游服务器集群(负载均衡)
upstream backend_server {
server 192.168.60.139:8080;
server 192.168.60.139:8081 backup;
}
# 虚拟主机配置
server {
# 监听端口
listen 80;
# 绑定域名
server_name localhost;
# 路由匹配规则
location / {
proxy_pass http://backend_server;
}
}
}upstream 块定义后端服务器集群,配合 proxy_pass 实现负载均衡,必须定义在 http 块内。
upstream backend_server {
# 负载均衡策略:默认轮询
server 192.168.60.139:8080 weight=5; # 权重轮询
server 192.168.60.139:8081 backup; # 备用服务器
server 192.168.60.139:8082 down; # 标记服务器下线
# ip_hash; # 开启 IP 哈希策略
# least_conn; # 开启最少连接数策略
}weight:权重值,数值越大处理请求越多
backup:仅主服务器故障时启用
down:永久下线该服务器
支持策略:轮询(默认)、权重轮询、IP 哈希、最少连接数
server 块定义虚拟主机,一个 http 块可配置多个 server,实现多域名 / 多端口独立部署。
server {
listen 80 default_server; # 监听 80 端口,设为默认虚拟主机
server_name www.test.com test.com; # 绑定多个域名
charset utf-8; # 默认字符集
# 路由规则
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 自定义错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}location 块用于匹配客户端请求 URL,实现静态资源处理、请求转发、访问控制等功能,是最常用的路由配置。
location = /url:精确匹配,优先级最高
location ^~ /url:前缀匹配,不执行正则匹配
location ~ /url:区分大小写正则匹配
location ~* /url:不区分大小写正则匹配
location /url:普通前缀匹配
location /:通用匹配,优先级最低
# 1. 精确匹配根目录
location = / {
root html;
index index.html index.htm;
}
# 2. 前缀匹配静态资源目录
location ^~ /static/ {
alias /webroot/static/; # alias:路径替换(与 root 不同)
}
# 3. 正则匹配静态文件
location ~* \.(gif|jpg|png|css|js)$ {
root /webroot/static/;
expires 7d; # 静态资源缓存 7 天
}
# 4. 通用匹配,转发到后端服务 + IP 访问控制
location / {
proxy_pass http://backend_server;
deny 192.168.3.29; # 禁止该 IP 访问
allow 192.168.5.0/24; # 允许该网段访问
}root:路径拼接(请求 /static/img.png → /webroot/static/static/img.png)
alias:路径替换(请求 /static/img.png → /webroot/static/img.png)
访问控制:先 deny 后 allow,顺序决定生效结果