### ️ 一、 Nginx 核心配置规范 Nginx 的强大源于其清晰的层次化配置文件(通常为 `nginx.conf`)。一个标准的配置应包含以下五大核心块: * **全局块 (Global Block)**:配置影响 Nginx 全局的指令,如运行用户(`user nginx;`)、Worker 进程数(`worker_processes auto;`,通常设为 CPU 核心数以最大化性能)以及错误日志路径。 * **Events 块**:配置网络连接处理模型。在 Linux 下推荐使用高性能的 `epoll` 模型,并设置单个 Worker 的最大连接数(`worker_connections`)。 * **HTTP 块**:Web 服务的核心容器,负责引入 MIME 类型、定义日志格式(`log_format`)、开启 Gzip 压缩以及引入虚拟主机配置。 * **Server 块 (虚拟主机)**:定义独立的网站或服务,通过 `listen` 指定监听端口,`server_name` 指定域名。 * **Location 块 (路径匹配)**:精细化控制不同 URL 路径的行为,如静态文件根目录(`root`)、默认首页(`index`)或反向代理转发(`proxy_pass`)。 **最佳实践**:建议将主配置文件 `nginx.conf` 保持简洁,通过 `include /etc/nginx/conf.d/*.conf;` 的方式,将不同业务(如前端静态站、后端 API 代理)拆分为独立的配置文件进行管理。 ### 二、 常见应用场景配置策略 1. **静态网站托管与 SPA 支持** 对于 Vue/React 等单页应用(SPA),需配置 `try_files` 解决前端路由刷新 404 的问题。同时,对 JS、CSS、图片等静态资源开启长效浏览器缓存,能极大提升用户体验。 ```nginx server { listen 80; server_name my-app.com; root /var/www/my-app/dist; index index.html; # SPA 路由支持:找不到文件时默认返回 index.html location / { try_files $uri $uri/ /index.html; } # 静态资源缓存 1 年 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } } ``` 2. **反向代理与负载均衡** 作为 API 网关时,必须通过 `proxy_set_header` 传递客户端真实 IP 和协议信息,否则后端服务无法获取真实的用户来源。在多节点部署时,可使用 `upstream` 块配合加权轮询或最少连接数(`least_conn`)策略实现流量分发。 ```nginx upstream backend_servers { least_conn; # 最少连接数策略 server 192.168.1.10:8080 weight=3; server 192.168.1.11:8080 weight=1; } server { location /api/ { proxy_pass http://backend_servers; 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_set_header X-Forwarded-Proto $scheme; } } ``` ### 三、 性能调优与系统加固 1. **系统与内核参数优化** 在高并发场景下,需调整 Linux 内核参数以突破默认限制。建议修改 `/etc/sysctl.conf`,增大 TCP 连接队列(`net.core.somaxconn`)和 SYN 队列(`net.ipv4.tcp_max_syn_backlog`),并扩大本地端口范围(`net.ipv4.ip_local_port_range`)。同时,在 `/etc/security/limits.conf` 中增加 Nginx 用户的文件描述符限制(`nofile 65535`),防止出现 "Too many open files" 错误。 2. **Nginx 内部机制调优** 开启 `sendfile on;` 和 `tcp_nopush on;` 可以减少用户空间到内核空间的数据拷贝,极大提升静态文件传输效率。启用 Gzip 压缩(`gzip on;`)并对文本类资源进行压缩,能有效减少网络传输量。此外,合理设置 `keepalive_timeout`(如 65s)可以维持长连接,减少 TCP 握手开销。 3. **HTTPS 安全加固** 生产环境必须部署 SSL 证书。建议仅启用安全的 `TLSv1.2` 和 `TLSv1.3` 协议,配置强加密套件,并开启 `ssl_stapling` 以提升 HTTPS 握手速度。 ### 四、 日常维护与自动化巡检 为了保障网关服务的稳定运行,建议建立轻量、可靠的自动化巡检机制: * **进程与端口存活检查**:编写脚本定期通过 `pgrep` 检查 Nginx 主进程是否存在,并通过 `ss` 或 `lsof` 确认 80/443 端口处于 `LISTEN` 状态。 * **配置语法预检**:任何配置变更在重载(reload)前,必须执行 `nginx -t` 验证语法合法性,防止因配置错误导致服务中断。同时可检查配置目录下是否存在 `.bak`、`.swp` 等可能被误加载的临时文件。 * **连接与错误率监控**:开启 `stub_status` 模块,通过脚本获取活跃连接数。定期分析 `access.log` 尾部日志,统计 5xx 状态码占比,若超过阈值(如 5%)立即触发告警。 * **日志轮转与清理**:配置 `logrotate` 对 Nginx 日志进行每日切割和压缩,避免日志文件无限膨胀占用磁盘空间。同时定期清理 `client_body_temp` 等目录下的过期临时文件。 ### ️ 五、 应急响应与故障排查 当发生异常访问或攻击时,应遵循以下流程快速止损: 1. **快速封禁**:若发现特定 IP 进行恶意扫描或 DDoS 攻击,立即通过 `iptables` 或 Fail2Ban 封禁该 IP。 2. **日志排查**:通过 `tail -f` 实时查看 `error.log` 和 `access.log`,定位攻击特征(如 SQL 注入、XSS 跨站脚本)及受影响的接口。 3. **服务恢复**:在修复漏洞或调整限流配置后,使用 `nginx -s reload` 平滑重载配置。 4. **复盘优化**:记录攻击过程,优化 WAF(Web 应用防火墙)规则,并定期升级 Nginx 版本以修补已知的安全漏洞。