1. 反向代理进阶配置
反向代理不仅可以简单转发请求,还支持设置请求头、超时、负载均衡等。
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend-server:8080;
# 传递客户端真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
# 超时设置
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
# 关闭缓存,确保实时请求
proxy_buffering off;
}
}2. 负载均衡配置示例
实现简单的轮询负载均衡,多个后端服务器分担请求压力。
upstream backend_pool {
server backend1.example.com weight=3; # 权重为3,请求量较多
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name www.example.com;
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;
}
}负载均衡策略
- 轮询(默认):按顺序依次分发请求
- 权重(weight):根据权重值分配请求比例
- IP哈希(ip_hash):同一客户端IP总是发到同一台服务器
- 最少连接数(least_conn):优先将请求发给连接数最少的服务器
示例启用 ip_hash:
upstream backend_pool {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}3. HTTPS 与 SSL 配置
开启 HTTPS,增强数据传输安全。
server {
listen 443 ssl;
server_name secure.example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
# 将 HTTP 重定向到 HTTPS
server {
listen 80;
server_name secure.example.com;
return 301 https://$host$request_uri;
}4. 缓存配置示例
利用 proxy_cache 缓存后端响应,减少服务压力。
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name cache.example.com;
location / {
proxy_pass http://backend-server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 不缓存 Set-Cookie
proxy_ignore_headers Set-Cookie;
proxy_cache_use_stale error timeout updating;
}
}5. 安全防护配置示例
限制访问、限速、阻挡恶意请求。
# 简单限速:每秒最多10个请求,突发20个
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
listen 80;
server_name secure.example.com;
location / {
limit_req zone=one burst=20 nodelay;
# 阻止访问 .git 目录
location ~ /\.git {
deny all;
}
# 允许特定 IP 访问管理接口
location /admin {
allow 192.168.1.100;
deny all;
}
}
}6. 日志格式与访问控制
自定义日志格式,方便分析。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;根据来源 IP 选择性禁止访问:
server {
listen 80;
server_name example.com;
location / {
deny 192.168.1.50;
allow all;
root /usr/share/nginx/html;
}
}结语
- Nginx 功能强大,上面的配置仅涵盖常见场景。
- 实际项目中可结合需求,灵活使用反向代理、缓存、负载均衡、限流等功能。
- 每次修改请务必通过
nginx -t测试配置,避免服务中断。 - 推荐配合
systemctl reload nginx实现无缝重载。
作者:admin 创建时间:2025-10-20 16:22
最后编辑:admin 更新时间:2025-10-20 16:26
最后编辑:admin 更新时间:2025-10-20 16:26