在Nginx反向代理中,server
块是核心配置单元,用于定义虚拟主机(站点)的监听规则和请求处理逻辑。以下是server
块中关键配置信息的详细解析,结合反向代理场景说明其作用和配置方法:
一、基础监听配置
perl
nginx
server {
listen 80; # 监听HTTP的80端口
listen 443 ssl; # 监听HTTPS的443端口(需配合SSL配置)
server_name example.com; # 匹配请求的域名或IP
}
listen
:指定监听的端口和协议(如ssl
表示HTTPS)。可监听特定IP(如listen 192.168.1.100:80;
),若省略IP则默认监听所有网络接口。server_name
:匹配请求头中的Host
字段,支持通配符(如*.example.com
)和正则表达式(如~^(www.)?example.com$
)。若未匹配到任何server_name
,则使用默认配置(第一个listen
相同端口的server
块)。
二、反向代理核心配置
bash
nginx
location / {
proxy_pass http://backend_server; # 转发到后端服务器
proxy_set_header Host $host; # 传递原始请求的Host头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链IP
}
-
proxy_pass
:指定后端服务器地址,可以是域名、IP或上游服务器组(upstream
)。例如:ininginx upstream backend_servers { server 192.168.1.101:8080 weight=3; # 权重轮询 server 192.168.1.102:8080 backup; # 备用服务器 } proxy_pass http://backend_servers;
-
proxy_set_header
:修改或添加转发给后端的请求头,关键参数包括:Host
:保留原始域名,避免后端依赖IP:Port
处理请求。X-Real-IP
和X-Forwarded-For
:记录客户端真实IP,用于日志分析和访问控制。X-Forwarded-Proto
:标识原始请求协议(HTTP/HTTPS),便于后端生成正确链接。
三、路径匹配与分发
通过location
块实现基于路径的请求分发,支持精确匹配、前缀匹配和正则匹配:
bash
nginx
location /api/ {
proxy_pass http://api_server; # 转发/api/开头的请求到API服务
}
location ~* .(jpg|png|css)$ {
root /data/static; # 静态文件直接由Nginx处理
expires 30d; # 缓存30天
}
- 匹配规则优先级 :
=
(精确匹配) >^~
(前缀匹配) >~
(正则匹配) > 普通前缀匹配。
四、HTTPS与安全配置
bash
nginx
server {
listen 443 ssl;
server_name secure.example.com;
ssl_certificate /path/to/cert.pem; # SSL证书路径
ssl_certificate_key /path/to/key.pem; # 私钥路径
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全协议
ssl_ciphers HIGH:!aNULL:!MD5; # 强制高强度加密
# 强制HTTP跳转HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
}
- SSL配置:需提前申请证书(如Let's Encrypt),并指定协议版本和加密套件以增强安全性。
- HTTP到HTTPS重定向 :通过
301
永久重定向确保所有流量加密传输。
五、负载均衡与高可用
ini
nginx
upstream backend {
ip_hash; # 基于客户端IP的会话保持
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s; # 故障转移
}
server {
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout invalid_header; # 请求失败时自动切换后端
}
}
-
负载均衡算法:
- 轮询(默认) :按权重分配请求。
- IP哈希:固定客户端IP到特定后端,适用于会话依赖场景。
- 最少连接:优先分配给活跃连接少的后端(需Nginx Plus或第三方模块)。
-
健康检查 :通过
max_fails
和fail_timeout
参数自动剔除故障节点。
六、性能优化配置
ini
nginx
server {
# 启用Gzip压缩
gzip on;
gzip_types text/css application/json;
# 客户端连接超时设置
proxy_connect_timeout 5s; # 连接后端超时时间
proxy_read_timeout 30s; # 读取响应超时时间
# 缓冲区配置
proxy_buffering on;
proxy_buffers 8 16k; # 缓冲区数量和大小
}
- 压缩:减少传输数据量,提升加载速度。
- 超时控制:避免因后端响应慢导致Nginx连接堆积。
- 缓冲区:平衡内存使用和网络延迟,防止高并发下内存溢出。
七、常见问题排查
-
502 Bad Gateway:
- 检查后端服务是否运行(
curl http://backend_server
)。 - 调整
proxy_connect_timeout
和proxy_read_timeout
。 - 确认
proxy_pass
路径与后端应用上下文匹配(如/app/
而非/
)。
- 检查后端服务是否运行(
-
日志分析:
luanginx access_log /var/log/nginx/access.log combined; # 记录请求详情 error_log /var/log/nginx/error.log warn; # 记录错误信息
- 通过
grep "502" /var/log/nginx/error.log
快速定位问题。
- 通过
-
配置测试与重载:
bashbash nginx -t # 测试配置语法 nginx -s reload # 平滑重载配置