一、Server块基础配置详解
1.1 监听端口与协议配置
Server块的核心功能是定义虚拟主机监听规则,通过listen指令实现多协议支持:
server {listen 80; # 默认HTTP监听listen 443 ssl; # HTTPS监听需配合SSL配置listen 192.168.1.100:8080; # 指定IP+端口监听server_name api.example.com; # 域名匹配规则}
listen指令支持三种格式:
- 仅端口号:监听所有网络接口(0.0.0.0)
- IP+端口:定向监听特定网卡
- 协议修饰符:ssl表示启用HTTPS,http2表示支持HTTP/2
1.2 域名匹配策略
server_name指令支持多种匹配模式,优先级从高到低依次为:
- 精确匹配:
server_name example.com; - 通配符匹配:
server_name *.example.com; - 正则匹配:
server_name ~^(www\.)?example\.com$; - 默认匹配:当所有server_name均不匹配时,选择第一个监听相同端口的server块
生产环境建议配置默认server块捕获异常流量:
server {listen 80 default_server;return 444; # 直接关闭连接}
二、反向代理核心配置
2.1 基础代理配置
location块是实现反向代理的关键,通过proxy_pass指令转发请求:
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:支持域名、IP或上游组(upstream)proxy_set_header:修改请求头信息,确保后端获取真实客户端信息proxy_hide_header:过滤敏感响应头(如Server信息)
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; # 备用服务器least_conn; # 最少连接数算法}
常用调度算法:
- 轮询(默认):按顺序分配请求
- ip_hash:基于客户端IP哈希固定后端
- least_conn:优先分配给连接数最少的服务器
三、路径匹配与请求分发
3.1 匹配规则优先级
Nginx采用最长前缀匹配原则,具体优先级如下:
=精确匹配:location = /login^~前缀匹配:location ^~ /static/~正则匹配(区分大小写):location ~ \.(jpg|png)$~*正则匹配(不区分大小写)- 普通前缀匹配:
location /
3.2 静态资源处理优化
对于图片、CSS等静态资源,建议采用独立location块:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {root /var/www/static;expires 7d; # 浏览器缓存7天add_header Cache-Control "public";access_log off; # 关闭日志记录}
性能优化技巧:
- 使用
sendfile on启用零拷贝传输 - 配置
gzip_static on启用预压缩文件 - 通过
open_file_cache缓存文件描述符
四、HTTPS安全配置
4.1 SSL证书配置
现代HTTPS配置需禁用不安全协议和弱加密算法:
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 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# HSTS配置add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;}
4.2 安全增强配置
推荐配置以下安全头:
add_header X-Content-Type-Options "nosniff";add_header X-Frame-Options "SAMEORIGIN";add_header X-XSS-Protection "1; mode=block";add_header Content-Security-Policy "default-src 'self'";
五、高级配置技巧
5.1 请求限流
通过limit_req模块防止DDoS攻击:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;server {location /api/ {limit_req zone=api_limit burst=20 nodelay;proxy_pass http://backend;}}
5.2 健康检查
配置主动健康检查(需商业版或第三方模块):
upstream backend {server 10.0.0.1:8080 max_fails=3 fail_timeout=30s;server 10.0.0.2:8080;health_check interval=10 fails=3 passes=2;health_check_timeout 5s;}
5.3 日志分析优化
配置结构化日志便于ELK分析:
log_format json_log '{"time":"$time_local",''"client":"$remote_addr",''"request":"$request",''"status":"$status",''"size":"$body_bytes_sent",''"referer":"$http_referer",''"ua":"$http_user_agent"}';access_log /var/log/nginx/access.log json_log;
六、常见问题排查
6.1 502 Bad Gateway错误
可能原因:
- 后端服务不可用
- proxy_pass配置错误
- 网络防火墙拦截
排查步骤:
- 检查后端服务状态
- 验证upstream配置
- 使用
curl -v http://backend测试连通性
6.2 SSL握手失败
常见解决方案:
- 检查证书链是否完整
- 确认协议版本支持
- 验证证书有效期
- 检查SNI配置(多域名场景)
通过系统掌握这些配置技巧,运维人员可以构建出高性能、高可用的Nginx反向代理服务。实际部署时建议结合监控告警系统,持续优化配置参数以适应业务发展需求。