一、基础监听配置详解
Server块的核心功能是定义虚拟主机,其监听配置直接决定了服务器的网络行为。典型的配置结构如下:
server {listen 80; # 监听HTTP默认端口listen 443 ssl; # 监听HTTPS端口并启用SSLlisten 192.168.1.100:8080; # 绑定特定IP和端口server_name api.example.com www.example.com;}
1.1 监听参数解析
-
端口绑定:
listen指令支持多种格式:- 纯端口号:
listen 80(监听所有网络接口) - IP+端口:
listen 10.0.0.5:8080(仅绑定指定IP) - 协议指定:
listen 443 ssl(启用HTTPS) - 特殊参数:
listen 80 default_server(设为默认Server块)
- 纯端口号:
-
IPv6支持:需使用方括号包裹IP地址:
listen [2001
:1]:80;
1.2 Server Name匹配规则
server_name指令支持三种匹配模式:
- 精确匹配:
server_name example.com; - 通配符匹配:
- 前缀通配:
*.example.com - 后缀通配:
mail.*
- 前缀通配:
- 正则匹配:
server_name ~^(www\.)?example\.com$;
优先级规则:精确匹配 > 前缀通配 > 正则匹配 > 默认配置。当请求的Host头未匹配任何server_name时,Nginx会选择第一个监听相同端口的Server块作为默认配置。
二、反向代理核心配置实践
反向代理是Nginx最核心的功能之一,通过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_set_header X-Forwarded-Proto $scheme;}
2.1 后端服务定义
后端服务可通过三种方式定义:
- 直接指定:
proxy_pass http://10.0.0.10:8080;
- 使用变量:
proxy_pass http://$backend_server;
- 上游模块(推荐):
upstream backend_pool {server 10.0.0.10:8080 weight=3;server 10.0.0.11:8080 backup;server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;}
负载均衡策略:
- 轮询(默认)
- IP Hash:
ip_hash; - 最少连接:
least_conn; - 响应时间加权:需结合第三方模块
2.2 请求头处理
关键请求头参数说明:
| 参数 | 作用 | 示例值 |
|———|———|————|
| Host | 传递原始域名 | $host |
| X-Real-IP | 客户端真实IP | $remote_addr |
| X-Forwarded-For | 代理链IP | $proxy_add_x_forwarded_for |
| X-Forwarded-Proto | 原始协议 | $scheme |
安全建议:在生产环境中务必设置X-Forwarded-For,否则后端服务将无法获取客户端真实IP。
三、路径匹配与分发策略
Nginx通过location指令实现精细化的流量分发,支持四种匹配模式:
3.1 匹配类型详解
| 修饰符 | 匹配方式 | 示例 | |
|---|---|---|---|
| = | 精确匹配 | location = /login |
|
| ^~ | 前缀匹配(优先) | location ^~ /static/ |
|
| ~ | 正则匹配(区分大小写) | `location ~ .(jpg | png)$` |
| ~* | 正则匹配(不区分大小写) | `location ~* .(js | css)$` |
优先级规则:
- 精确匹配(=)
- 前缀匹配(^~)
- 正则匹配(按配置文件中的顺序)
- 普通前缀匹配
3.2 典型应用场景
静态资源处理
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {root /var/www/static;expires 30d;access_log off;}
API接口转发
location /api/ {proxy_pass http://api_backend;proxy_connect_timeout 60s;proxy_read_timeout 300s;}
WebSocket支持
location /ws/ {proxy_pass http://websocket_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
四、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:!3DES;ssl_prefer_server_ciphers on;# HSTS配置add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;}
4.2 安全增强措施
-
会话复用优化:
ssl_session_cache shared
10m;ssl_session_timeout 10m;
-
OCSP Stapling:
ssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s;
-
防点击劫持:
add_header X-Frame-Options SAMEORIGIN;
-
内容安全策略:
add_header Content-Security-Policy "default-src 'self'";
4.3 性能优化技巧
-
TLS假握手:
ssl_early_data on; # 需要客户端支持TLS 1.3
-
零拷贝传输:
sendfile on;tcp_nopush on;
-
连接保持:
keepalive_timeout 75s;keepalive_requests 1000;
五、高级配置技巧
5.1 多域名证书配置
server {listen 443 ssl;server_name example.com www.example.com;ssl_certificate /path/to/multidomain.pem;ssl_certificate_key /path/to/privkey.pem;}
5.2 流量镜像(A/B测试)
split_clients $remote_addr $backend {50% backend_v1;50% backend_v2;}server {location / {proxy_pass http://$backend;}}
5.3 限流配置
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;server {location /api/ {limit_req zone=api_limit burst=20 nodelay;}}
总结
本文系统梳理了Nginx Server块的核心配置,从基础监听设置到高级安全优化,覆盖了反向代理部署中的关键场景。通过合理配置Server块,可以实现:
- 多域名虚拟主机管理
- 智能流量分发与负载均衡
- 端到端的安全加固
- 高并发场景下的性能优化
建议运维人员结合实际业务需求,参考本文提供的配置模板进行定制化开发,同时定期更新SSL证书和Nginx版本以保障服务安全性。对于超大规模部署场景,可考虑结合监控系统实现动态配置调整。