一、基础监听配置详解
Server块的核心功能是通过监听特定端口接收客户端请求,其配置直接影响服务可用性与安全性。典型配置结构如下:
server {listen 80; # 监听HTTP标准端口listen 443 ssl; # 启用HTTPS需配合ssl参数listen 192.168.1.100:8080; # 绑定特定IP与端口server_name api.example.com; # 域名匹配规则}
1.1 监听参数配置要点
-
端口绑定:
listen指令支持多种格式:- 基础格式:
listen [IP:]PORT(省略IP则监听所有网卡) - 协议指定:
listen PORT ssl(启用SSL/TLS加密) - 高级选项:
listen PORT default_server(设为默认Server块)
- 基础格式:
-
IPv6支持:现代系统需显式声明IPv6监听:
listen [::]:80 ipv6only=on;
1.2 域名匹配策略
server_name指令支持三种匹配模式:
- 精确匹配:
server_name example.com; - 通配符匹配:
- 前缀通配:
*.example.com - 后缀通配:
mail.*
- 前缀通配:
- 正则匹配:
server_name ~^(www\.)?example\.com$;
优先级规则:精确匹配 > 前缀通配 > 正则匹配 > 默认配置。当请求Host头无法匹配任何server_name时,系统会选择第一个监听相同端口的Server块作为默认处理。
二、反向代理核心参数配置
通过location块实现请求转发是反向代理的核心功能,关键参数配置如下:
2.1 基础代理配置
location / {proxy_pass http://backend_pool;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_pass:支持三种后端定义方式:
- 直接URL:
http://10.0.0.1:8080 - 域名解析:
http://api.internal - 上游组:通过
upstream定义负载均衡池
- 直接URL:
-
请求头传递:
Host:保留原始域名避免后端服务依赖IPX-Real-IP:记录客户端真实IPX-Forwarded-For:构建代理链(格式:client, proxy1, proxy2)
2.2 上游服务器组配置
生产环境推荐使用upstream模块实现负载均衡:
upstream backend_pool {server 10.0.0.1:8080 weight=5; # 权重轮询server 10.0.0.2:8080 max_fails=3 fail_timeout=30s; # 故障转移server 10.0.0.3:8080 backup; # 备用节点}
高级特性:
- 健康检查:通过
max_fails和fail_timeout实现自动故障隔离 - 会话保持:
ip_hash指令实现基于客户端IP的固定分配 - 动态解析:
resolver指令支持DNS轮询更新
三、路径匹配与流量分发
通过不同location匹配规则实现精细化流量控制,典型场景包括API路由、静态资源处理等。
3.1 匹配规则类型
| 匹配类型 | 语法示例 | 特点 | |
|---|---|---|---|
| 精确匹配 | location = /login |
最高优先级,完全匹配 | |
| 前缀匹配 | location /static/ |
默认匹配方式 | |
| 正则匹配 | `location ~* .(jpg | png)$` | 不区分大小写(~*) |
3.2 典型应用场景
静态资源加速
location ~* \.(css|js|jpg|png)$ {root /var/www/static;expires 7d; # 浏览器缓存控制access_log off; # 关闭日志记录add_header Cache-Control "public";}
API服务路由
location /api/v1/ {proxy_pass http://api_cluster;proxy_connect_timeout 500ms; # 连接超时设置proxy_read_timeout 2s; # 读取超时设置}
优先级规则:= > ^~ > ~*/~ > 普通前缀匹配。当多个规则匹配成功时,Nginx会选择优先级最高的规则执行。
四、HTTPS安全加固配置
现代Web服务必须支持HTTPS加密传输,关键配置要素如下:
4.1 SSL证书配置
server {listen 443 ssl;server_name secure.example.com;ssl_certificate /etc/nginx/certs/fullchain.pem;ssl_certificate_key /etc/nginx/certs/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全协议ssl_ciphers HIGH:!aNULL:!MD5:!RC4;}
4.2 安全增强配置
- HSTS头:强制浏览器使用HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- OCSP Stapling:减少SSL握手延迟
ssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 valid=300s;
- 会话复用:提升重复连接性能
ssl_session_cache shared
10m;ssl_session_timeout 10m;
4.3 性能优化建议
- 协议选择:优先启用TLS 1.3,禁用SSLv3/TLS 1.0/1.1
- 证书格式:使用PEM格式证书,避免DER格式的额外解析开销
- 会话票证:启用
ssl_session_tickets on减少握手数据量
五、生产环境最佳实践
5.1 配置模块化
将不同业务配置拆分为独立文件,通过include指令引入:
# nginx.conf 主配置include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
5.2 性能监控
结合日志服务实现请求监控:
log_format proxy_log '[$time_local] $remote_addr -> $host$request ''"$status" $upstream_addr $request_time';access_log /var/log/nginx/proxy.log proxy_log;
5.3 故障排查工具
- 测试配置语法:
nginx -t - 查看运行状态:
nginx -s reload(平滑重启) - 调试日志:在Server块中添加
error_log /var/log/nginx/debug.log debug;
结语
通过系统化的Server块配置,Nginx可构建出高性能、高可用的反向代理服务。实际部署时需根据业务需求灵活组合各模块参数,建议通过压力测试验证配置效果。对于超大规模流量场景,可考虑结合负载均衡设备与Nginx集群实现横向扩展。