nginx.conf 通用生产级配置
一、完整 nginx.conf
# 定义Nginx运行的用户和用户组
user www-data;
# 工作进程数,建议 = CPU核心数,auto自动识别
worker_processes auto;
# 全局错误日志路径 & 日志级别
# 级别:debug | info | notice | warn | error | crit
error_log /var/log/nginx/error.log warn;
# Nginx进程号存放文件
pid /run/nginx.pid;
# 包含动态模块(Ubuntu默认)
include /etc/nginx/modules-enabled/*.conf;
# ------------------------------
# 事件模块(连接处理核心)
# ------------------------------
events {
# 单个worker最大连接数(并发核心)
worker_connections 1024;
# 使用epoll模型(Linux高性能IO)
use epoll;
# 多进程accept锁,防止惊群效应
multi_accept on;
}
# ------------------------------
# HTTP核心模块(所有网站配置都在这里)
# ------------------------------
http {
# 文件扩展名与文件类型映射表
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 日志格式(自定义名称 main)
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;
# 隐藏Nginx版本号,提高安全
server_tokens off;
# 客户端请求头缓冲区大小
client_header_buffer_size 3k;
# 大型客户端请求头缓冲区
large_client_header_buffers 4 64k;
# 客户端上传文件大小限制
client_max_body_size 100M;
# ------------------------------
# 【全局限流配置】
# ------------------------------
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
# ------------------------------
# 【全局缓存配置(API/静态资源)】
# ------------------------------
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:2
keys_zone=proxy_cache:10m
max_size=10g
inactive=60m
use_temp_path=off;
# Gzip全局开启(前端必开)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
g_types text/plain text/css application/json application/javascript
text/javascript application/xml+rss text/xml;
# ------------------------------
# 包含子配置(所有站点放 conf.d/ 下)
# ------------------------------
include /etc/nginx/conf.d/*.conf;
}
二、这个 nginx.conf 后期怎么用?
规则:
主配置 nginx.conf 不动!
所有站点、反向代理、权限、缓存 全部写在:
/etc/nginx/conf.d/xxx.conf
一个站点一个 conf,互不干扰。
三、后期通用配置示例
下面给你 4 种最常用 conf,你直接丢进 conf.d/ 即可。
示例 1:静态网站 / Vue / React(最常用)
/etc/nginx/conf.d/frontend.conf
server {
listen 80;
server_name 192.168.1.100;
root /var/www/frontend/dist;
index index.html;
# SPA刷新404解决
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存30天
location ~* .(js|css|png|jpg|svg|woff2)$ {
expires 30d;
add_header Cache-Control public;
}
}
示例 2:API 反向代理(带限流 + 真实 IP)
/etc/nginx/conf.d/api.conf
server {
listen 80;
server_name api.xxx.com;
location /api {
# 限流
limit_req zone=api burst=20 nodelay;
limit_conn conn 10;
# 代理
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;
}
}
示例 3:带权限控制(后台 / 管理页)
/etc/nginx/conf.d/admin.conf
server {
listen 80;
server_name admin.xxx.com;
location /admin {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_pass http://127.0.0.1:8080;
}
}
示例 4:带缓存的 API(减轻后端压力)
/etc/nginx/conf.d/cache_api.conf
server {
listen 80;
server_name data.xxx.com;
location /api/data {
proxy_cache proxy_cache;
proxy_cache_valid 200 30m;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://127.0.0.1:8080;
}
}
四、修改配置后标准操作(必背)
# 检查配置是否错误
sudo nginx -t
# 平滑重启(不影响用户)
sudo systemctl reload nginx
# 查看状态
sudo systemctl status nginx
五、这套架构的优点
- 主配置永不改,稳定安全
- 每个站点独立 conf
- 全局限流、缓存、gzip 统一管理
- 后期加站点只需新增文件,不用动主配置
- 生产环境标准架构