一、进程管理配置
1.1 用户权限控制
Nginx进程默认以nobody用户运行,生产环境建议指定专用用户(如nginx)以限制文件操作权限。配置示例:
user nginx; # 指定运行用户
需提前在Linux系统中创建该用户并配置目录权限,避免因权限不足导致服务启动失败或日志写入异常。
1.2 工作进程优化
worker_processes参数决定处理请求的进程数量,推荐配置方式:
- 物理CPU核心数:
worker_processes auto;(自动检测) - 固定值:
worker_processes 4;(4核CPU场景) - N-1原则:
worker_processes 3;(4核CPU保留1核给系统)
进程数过多会导致上下文切换开销增大,过少则无法充分利用硬件资源。可通过top命令观察CPU使用率进行动态调整。
二、事件处理模型
2.1 I/O多路复用选择
在events模块中,use指令指定事件驱动模型:
events {use epoll; # Linux高效模型# use kqueue; # BSD系统# use select/poll; # 兼容性方案}
epoll模型在百万级连接场景下性能优势显著,其时间复杂度为O(1),而传统select模型为O(n)。
2.2 连接数配置
worker_connections定义单个进程的最大连接数:
worker_connections 10240; # 典型高并发配置
实际最大连接数计算公式:最大连接数 = worker_processes * worker_connections / 2(反向代理场景需除以2)。
三、日志系统配置
3.1 日志级别管理
错误日志支持8种级别,生产环境建议配置:
error_log /var/log/nginx/error.log warn; # 只记录警告及以上级别
级别从低到高依次为:debug > info > notice > warn > error > crit > alert > emerg。调试阶段可使用debug级别,但会显著增加磁盘I/O。
3.2 访问日志定制
通过log_format定义日志格式,结合access_log启用:
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;
关键变量说明:
$time_local:客户端请求时间(含时区)$request:完整HTTP请求行(如GET /index.html HTTP/1.1)$http_x_forwarded_for:获取客户端真实IP(穿透CDN/代理时)
四、性能优化配置
4.1 零拷贝技术
启用sendfile可减少内核态到用户态的数据拷贝:
sendfile on; # 静态文件服务必备tcp_nopush on; # 配合sendfile使用,积累数据包后发送
测试表明,该组合可使静态文件传输吞吐量提升30%以上。
4.2 长连接优化
keepalive_timeout控制长连接保持时间:
keepalive_timeout 75s; # 默认值,可根据业务RTT调整keepalive_requests 1000; # 单个长连接最大请求数
在移动端场景建议缩短超时时间(如30s),避免占用服务器资源。
4.3 内容压缩
Gzip压缩配置示例:
gzip on;gzip_types text/css application/javascript image/svg+xml; # 指定压缩类型gzip_min_length 1k; # 最小压缩阈值gzip_comp_level 6; # 压缩级别(1-9)
压缩级别需权衡CPU消耗与压缩率,通常级别6在压缩率和CPU占用间取得较好平衡。
五、虚拟主机配置
5.1 多站点管理
通过server块实现虚拟主机:
server {listen 80;server_name example.com www.example.com;location / {root /var/www/html;index index.html;}error_page 404 /404.html;}
server_name支持通配符(如*.example.com)和正则表达式(需以~开头)。
5.2 请求路由控制
location指令实现精细路由:
location /api/ {proxy_pass http://backend; # 反向代理到后端服务proxy_set_header Host $host;}location ~* \.(jpg|png|css)$ {expires 30d; # 静态资源缓存控制access_log off; # 关闭日志记录}
匹配规则优先级:= > ^~ > ~/~* > 普通前缀匹配。
六、安全加固配置
6.1 隐藏版本号
修改nginx.conf主配置:
http {server_tokens off; # 隐藏HTTP响应头中的版本信息}
可有效降低被针对性攻击的风险。
6.2 限制请求方法
仅允许必要HTTP方法:
if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 405; # 禁止PUT/DELETE等危险方法}
需配合rewrite模块使用,建议通过limit_except实现更精细控制。
七、高级功能扩展
7.1 动态模块加载
支持运行时加载第三方模块:
load_module modules/ngx_http_geoip_module.so; # 加载GeoIP模块
需在编译时添加--with-compat参数确保模块兼容性。
7.2 状态监控
启用stub_status模块获取实时指标:
server {listen 8080;location /nginx_status {stub_status;allow 127.0.0.1;deny all;}}
访问http://127.0.0.1:8080/nginx_status可获取活跃连接数等关键指标。
通过系统化的配置管理,Nginx可轻松支撑百万级并发连接。实际运维中需结合监控系统(如Prometheus+Grafana)持续优化参数,建议定期进行压测(如使用wrk工具)验证配置效果。对于超大规模部署场景,可考虑结合容器编排技术实现动态扩缩容。