Nginx完整配置指南:从基础到实战
Nginx作为轻量级高性能Web服务器,凭借异步非阻塞模型和丰富的功能模块,成为互联网架构的核心组件。本文将系统梳理Nginx配置的核心逻辑、常用场景及实战优化,帮助开发者快速掌握配置精髓。
一、核心配置文件结构
Nginx主配置文件nginx.conf采用模块化层级结构,各块功能清晰:
- 全局块:定义Nginx运行的全局属性,如
worker_processes(建议设为CPU核心数)、错误日志路径error_log、PID文件位置pid。 - events块:控制网络连接处理,关键参数
worker_connections(单进程最大连接数,建议设为1024-4096)、事件模型use epoll(Linux环境推荐)。 - HTTP块:配置HTTP服务器核心参数,包括MIME类型映射
include mime.types、日志格式log_format、连接超时keepalive_timeout等。 - Server块:虚拟主机配置,通过
listen(端口)和server_name(域名)区分站点,可嵌套多个Server实现多域名站点。 - Location块:URL请求路由规则,支持前缀匹配
location /static、正则匹配location ~* \.(jpg|png)$,通过root(网站根目录)、index(默认首页)等指令定义资源处理逻辑。
二、常用场景配置实战
1. 虚拟主机(多域名站点)
server {
listen 80;
server_name example.com www.example.com; # 匹配多个域名
root /var/www/example; # 网站根目录
index index.html index.php; # 默认首页
access_log /var/log/nginx/example_access.log; # 独立日志
}
2. 反向代理(转发请求至后端服务)
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # 转发至Node.js后端
proxy_set_header Host $host; # 传递原请求头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_connect_timeout 30s; # 连接超时
proxy_read_timeout 60s; # 读取超时
}
}
3. 负载均衡(多后端服务集群)
http {
upstream backend {
server 192.168.1.101:8080 weight=2; # 权重2,负载更高
server 192.168.1.102:8080; # 轮询策略
server 192.168.1.103:8080 backup; # 备用服务器
}
server {
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
4. HTTPS强制跳转
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # HTTP跳HTTPS
# HTTPS配置(需提前安装证书)
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
}
}
5. 静态资源缓存与防盗链
location ~* \.(jpg|png|css|js)$ {
root /var/www/static;
expires 7d; # 缓存7天
add_header Cache-Control "public, max-age=604800";
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
return 403; # 非白名单Referer返回403
}
}
三、性能优化与安全加固
- 进程优化:
worker_processes auto;(自动适配CPU核心数),worker_connections 2048;(单进程连接上限)。 - 连接复用:
keepalive_timeout 65;(长连接保持),tcp_nopush on;(TCP快速响应)。 - 压缩加速:
gzip on;gzip_types text/css application/json;(仅压缩文本类资源)。 - 安全加固:
server_tokens off;(隐藏版本信息),limit_req zone=rate limit=20r/s;(限制请求速率)。
四、实战配置示例

以下为生产环境综合配置(支持HTTPS、反向代理、负载均衡):
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr [$time_local] "$request" $status $body_bytes_sent';
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
# 负载均衡组
upstream app_servers {
server backend1:8080 weight=3;
server backend2:8080;
least_conn; # 最少连接优先策略
}
# 主站点配置
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # HTTP强制HTTPS
location /api {
proxy_pass http://app_servers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# HTTPS站点配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
root /var/www/frontend;
try_files $uri $uri/ /index.html; # SPA路由支持
}
}
}
Nginx配置需根据实际业务场景灵活调整,建议通过nginx -t验证配置语法,nginx -s reload平滑重启服务。掌握模块化层级结构、反向代理与负载均衡,即可构建高可用Web架构。进阶优化可结合Lua模块实现更复杂的请求控制,进一步释放Nginx潜力。