1、全局配置模块
user nginx; # 运行Nginx的用户和组(防止权限问题)
worker_processes auto; # 工作进程数(auto=自动匹配CPU核心数)
worker_rlimit_nofile 65535; # 单进程最大文件描述符数(需调整系统ulimit)
error_log /var/log/nginx/error.log warn; # 错误日志路径及级别(debug|info|warn|error)
pid /var/run/nginx.pid; # 主进程PID存储路径
2、events事件模块
events {
worker_connections 2048; # 单进程最大并发连接数(总连接数=worker_processes * worker_connections)
multi_accept on; # 一次性接受所有新连接(高并发场景必开)
use epoll; # 事件驱动模型(Linux建议epoll,FreeBSD用kqueue)
accept_mutex off; # 关闭连接互斥锁(高并发时提升性能)
}
3、HTTP 核心模块
http {
include /etc/nginx/mime.types; # 包含MIME类型定义文件
default_type application/octet-stream; # 默认响应Content-Type
charset utf-8; # 默认字符集
# 日志格式
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; # 合并数据包减少网络开销(需sendfile启用)
tcp_nodelay on; # 禁用Nagle算法(降低延迟)
keepalive_timeout 65; # 保持连接超时时间(单位:秒)
client_max_body_size 100M; # 客户端请求最大Body大小(上传文件需调整)
# 连接池优化
keepalive_requests 1000; # 单个连接最大请求数
reset_timedout_connection on; # 超时后重置连接释放资源
# Gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1k;
gzip_comp_level 5;
}
server 块应用例示
基础反向代理
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server; # 关键指令:指向后端服务器
proxy_set_header Host $host; # 传递原始域名
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https)
# 超时控制
proxy_connect_timeout 60s; # 连接后端超时时间
proxy_read_timeout 600s; # 读取响应超时
proxy_send_timeout 600s; # 发送请求超时
# 缓冲区优化
proxy_buffering on;
proxy_buffer_size 4k; # 响应头缓冲区
proxy_buffers 8 32k; # 响应内容缓冲区数量和大小
proxy_busy_buffers_size 64k;
}
}
负载均衡策略
upstream backend_server {
# 定义后端服务器(支持权重、健康检查)
server 192.168.1.101:8080 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 weight=3;
server 192.168.1.103:8080 backup; # 备份服务器
# 负载均衡算法
least_conn; # 最少连接数(可选:ip_hash, hash, random)
# 长连接优化
keepalive 32; # 连接池保持的空闲连接数
}
WebSocket 代理
√
SSL/TLS 安全配置
server {
listen 443 ssl;
server_name example.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 协议与加密套件
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全协议
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
# 会话复用优化
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 安全响应头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
}
高级配置
静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 365d; # 缓存过期时间
add_header Cache-Control "public, immutable"; # 强制缓存
access_log off; # 关闭日志记录
}
防盗链设置
location ~* \.(jpg|jpeg|png)$ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
限流与 DDOS 限制
# 定义限流区域(10MB内存区,每秒10请求)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20; # 允许突发20请求
limit_conn addr_zone 10; # 单IP最大连接数
}
评论区