Nginx 常用配置围绕 静态资源服务、反向代理、负载均衡、HTTPS 配置、限流 等核心场景,以下是结构化的常用配置示例及关键说明。
一、 全局基础配置(nginx.conf 顶部)
控制 Nginx 进程的核心参数,影响整体性能。
bash
# 工作进程数,建议等于 CPU 核心数
worker_processes 4;
# 错误日志路径及级别(debug/info/warn/error/crit)
error_log /var/log/nginx/error.log warn;
# PID 文件路径
pid /var/run/nginx.pid;
events {
# 单个工作进程的最大连接数
worker_connections 1024;
# 多路复用模型,Linux 推荐 epoll
use epoll;
}
二、 静态资源服务配置
用于部署前端静态文件(Vue/React 打包产物),优化访问性能。
bash
http {
include mime.types;
default_type application/octet-stream;
# 开启高效文件传输模式
sendfile on;
# 长连接超时时间
keepalive_timeout 65;
# 开启 gzip 压缩,减小传输体积
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name localhost;
# 静态资源根目录
root /usr/share/nginx/html;
index index.html index.htm;
location / {
# 解决前端路由刷新 404 问题(SPA 应用必备)
try_files $uri $uri/ /index.html;
}
# 静态资源缓存策略,图片/JS/CSS 缓存 30 天
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
}
}
三、 反向代理配置(代理 Java 后端服务)
将前端请求转发到后端 Spring Boot/Tomcat 服务,解决跨域和端口暴露问题。
bash
http {
server {
listen 80;
server_name api.example.com;
location /api/ {
# 后端服务地址
proxy_pass http://127.0.0.1:8080/;
# 传递真实客户端 IP 给后端
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_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
}
四、 负载均衡配置
分发请求到多个后端实例,提升系统可用性和并发能力。
bash
http {
# 定义后端服务集群
upstream backend_cluster {
# 策略1:轮询(默认)
server 192.168.1.101:8080 weight=1;
server 192.168.1.102:8080 weight=2; # weight 越大,权重越高
# 策略2:ip_hash(会话粘滞,同一IP固定到同一实例)
# ip_hash;
# 策略3:fair(按后端响应时间分配,需额外模块)
# fair;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
五、 HTTPS 配置(HTTP 转 HTTPS)
配置 SSL 证书,实现加密传输。
bash
http {
server {
listen 80;
server_name example.com;
# HTTP 强制跳转 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
# SSL 证书路径
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
# 安全的 SSL 协议版本
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
六、 限流配置(防止恶意请求)
限制单位时间内的请求数,保护后端服务。
bash
http {
# 定义限流规则:基于 IP 限流,10r/s(每秒10个请求),缓冲区 20 个请求
limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=10r/s;
server {
listen 80;
server_name example.com;
location / {
# 应用限流规则,burst 突发请求数,nodelay 不延迟处理
limit_req zone=limit_zone burst=20 nodelay;
proxy_pass http://backend_cluster;
}
}
}
七、 关键配置检查与重载
bash
# 检查配置语法是否正确
nginx -t
# 平滑重载配置(不中断服务)
nginx -s reload