http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
limit_conn perip 10; # 每个IP最多10个连接
limit_conn perserver 100; # 每个server最多100个连接
}
}
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
# 平均速率10请求/秒,突发不超过20请求
}
}
}
location /download/ {
limit_rate 100k; # 限制下载速度为100KB/s
limit_rate_after 1m; # 下载1MB后开始限速
}
http {
# 按地理区域限流
geo $limited {
default 0;
192.168.1.0/24 1;
}
map $limited $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=geo:10m rate=5r/s;
}
# 主配置文件nginx.conf
user nginx;
worker_processes auto;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
# conf.d/common.conf
gzip on;
gzip_types text/plain application/json;
env APP_ENV;
env DB_HOST;
http {
server {
set_by_lua $app_env 'return os.getenv("APP_ENV") or "production"';
}
}
推荐使用Git管理Nginx配置:
/etc/nginx/
├── nginx.conf
├── conf.d/
├── sites-available/
├── sites-enabled/
└── templates/
# 检查配置语法
nginx -t
# 平滑重载配置
nginx -s reload
# nginx.conf.j2
worker_processes {{ nginx_worker_processes }};
http {
gzip {{ 'on' if nginx_gzip_enabled else 'off' }};
server {
listen {{ nginx_listen_port }};
}
}
限流策略:
配置管理:
监控与调优:
http {
# 开启状态监控
server {
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}
动态限流:
通过合理配置Nginx限流和良好的配置管理实践,可以有效保护服务器资源,提高服务稳定性。