编程 Nginx最强配置清单(反向代理/限流/SSL/负载均衡)

2025-07-26 10:43:48 +0800 CST views 92

#Nginx最强配置清单(反向代理/限流/SSL/负载均衡)

本文介绍了Nginx的强大配置,包括负载均衡、反向代理、限流、安全防护、性能优化和日志管理等功能。通过示例代码,读者可以学习如何配置Nginx以实现高效的反向代理、SSL加密、请求限流、IP访问控制、静态资源缓存等。还涉及了高级功能如灰度发布和地理位置限制,帮助用户提升网站的安全性和性能。

一、核心功能配置

1. 负载均衡配置

upstream backend {
  # 轮询策略(默认)
  server 192.168.1.101:8080 weight=5 max_fails=3 fail_timeout=30s;
  server 192.168.1.102:8080 weight=5 max_fails=3 fail_timeout=30s;
  
  # 备用服务器
  server 192.168.1.103:8080 backup;
  
  # 长连接优化
  keepalive 32;
}

server {
  location / {
    proxy_pass http://backend;
    
    # 重要头部信息传递
    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_connect_timeout 5s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    
    # 缓冲区优化
    proxy_buffer_size 4k;
    proxy_buffers 8 16k;
  }
}

策略说明

  • weight:权重分配
  • ip_hash:基于IP的哈希分配(会话保持)
  • least_conn:最少连接数优先
  • fair:响应时间优先(需要第三方模块)

2. 反向代理配置

server {
  listen 443 ssl http2;  # 启用HTTP/2
  server_name example.com;
  
  # SSL配置
  ssl_certificate /etc/nginx/ssl/cert.pem;
  ssl_certificate_key /etc/nginx/ssl/key.pem;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  
  location /api/ {
    proxy_pass http://backend-api/;
    
    # WebSocket支持
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

二、安全防护配置

1. 限流配置

# 定义限流区域(内存区10MB,每秒10个请求)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

server {
  location /api/ {
    # 应用限流(突发20个请求)
    limit_req zone=api_limit burst=20 nodelay;
    
    # 限制单个IP并发连接数
    limit_conn perip 10;
    
    proxy_pass http://backend-api/;
  }
}

2. 访问控制

# IP黑白名单
geo $block {
  default 1;  # 默认禁止
  192.168.1.0/24 0;  # 允许内网
  10.0.0.0/8 0;      # 允许内网
}

server {
  if ($block) {
    return 403 "Forbidden";
  }
  
  # 限制HTTP方法
  limit_except GET POST { deny all; }
}

3. 安全头部

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

三、性能优化配置

1. 静态资源缓存

location ~* \.(?:jpg|jpeg|png|gif|ico|css|js|woff2)$ {
  expires 365d;
  access_log off;
  add_header Cache-Control "public, immutable";
  
  # 开启gzip
  gzip_static on;
  gzip_proxied any;
}

2. 连接优化

# 全局连接优化
keepalive_timeout 75s;
keepalive_requests 10000;
client_header_timeout 15s;
client_body_timeout 15s;
send_timeout 15s;

# TCP优化
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;

四、日志管理

1. JSON格式日志

log_format json_combined escape=json
  '{'
    '"timestamp":"$time_iso8601",'
    '"remote_addr":"$remote_addr",'
    '"remote_user":"$remote_user",'
    '"request":"$request",'
    '"status":"$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"request_time":"$request_time",'
    '"http_referer":"$http_referer",'
    '"http_user_agent":"$http_user_agent",'
    '"http_x_forwarded_for":"$http_x_forwarded_for"'
  '}';

access_log /var/log/nginx/access.log json_combined buffer=32k flush=5m;

五、高级功能

1. 灰度发布

map $http_cookie $upstream_group {
  ~*"gray=true" "gray";
  default "production";
}

upstream production {
  server 192.168.1.101:8080;
}

upstream gray {
  server 192.168.1.102:8080;
}

server {
  location / {
    proxy_pass http://$upstream_group;
  }
}

2. 地理位置限制

load_module modules/ngx_http_geoip2_module.so;  # 需要安装模块

http {
  geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
    $geoip2_data_country_code country iso_code;
  }
  
  map $geoip2_data_country_code $allowed_country {
    CN 1;  # 允许中国
    US 1;  # 允许美国
    default 0;
  }
}

server {
  if ($allowed_country = 0) {
    return 403 "Access denied for your country";
  }
}
复制全文 生成海报 Nginx Web服务器 网络安全 性能优化

推荐文章

Vue3中如何处理组件的单元测试?
2024-11-18 15:00:45 +0800 CST
Grid布局的简洁性和高效性
2024-11-18 03:48:02 +0800 CST
Vue中的表单处理有哪几种方式?
2024-11-18 01:32:42 +0800 CST
Nginx 如何防止 DDoS 攻击
2024-11-18 21:51:48 +0800 CST
php使用文件锁解决少量并发问题
2024-11-17 05:07:57 +0800 CST
JS中 `sleep` 方法的实现
2024-11-19 08:10:32 +0800 CST
Vue3 vue-office 插件实现 Word 预览
2024-11-19 02:19:34 +0800 CST
一个简单的打字机效果的实现
2024-11-19 04:47:27 +0800 CST
微信小程序热更新
2024-11-18 15:08:49 +0800 CST
前端代码规范 - 图片相关
2024-11-19 08:34:48 +0800 CST
pip安装到指定目录上
2024-11-17 16:17:25 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
H5端向App端通信(Uniapp 必会)
2025-02-20 10:32:26 +0800 CST
Elasticsearch 条件查询
2024-11-19 06:50:24 +0800 CST
markdown语法
2024-11-18 18:38:43 +0800 CST
markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
10个几乎无人使用的罕见HTML标签
2024-11-18 21:44:46 +0800 CST
pycm:一个强大的混淆矩阵库
2024-11-18 16:17:54 +0800 CST
如何在Vue中处理动态路由?
2024-11-19 06:09:50 +0800 CST
JavaScript数组 splice
2024-11-18 20:46:19 +0800 CST
程序员茄子在线接单