在香港部署网站,常常面对来自中国内地、东南亚及全球的并发流量。要在香港服务器上让 Nginx 在高并发场景下稳定且高效运行,需要从操作系统、Nginx 配置、网络与架构三条线同时着手。接下来,我们将从多个方面来优化,可供参考!
一、操作系统层面(内核与资源限制)
高并发关键在大量文件描述符(FD)与内核网络栈的并发能力。
1. 提高文件描述符限制,编辑 /etc/security/limits.conf
:
* soft nofile 200000
* hard nofile 200000
如果使用 systemd,还需在服务 override 中设置 LimitNOFILE=200000
。
2. sysctl 网络参数(示例)
将下面配置写入 /etc/sysctl.d/99-nginx.conf
并执行 sysctl -p
:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 10240 65535
说明:somaxconn
、tcp_max_syn_backlog
增加半连接队列,tcp_tw_reuse
有助于端口复用以减少 TIME_WAIT 堆积。修改须结合实际测试。
3. 网络拥塞控制(可选)
若内核支持,可启用 BBR:sysctl -w net.core.default_qdisc=fq
,sysctl -w net.ipv4.tcp_congestion_control=bbr
。注意:需要核对内核版本并在测试环境验证稳定性。
二、Nginx 进程与事件模型调优
Nginx 的 worker_processes
与 worker_connections
决定理论并发上限:
1. 基础配置(nginx.conf
)示例:
worker_processes auto;
worker_rlimit_nofile 200000;
events {
use epoll; # Linux 推荐 epoll
worker_connections 32768;
multi_accept on;
}
计算并发上限:并发连接 ≈ worker_processes × worker_connections
(还要考虑每个连接的文件描述符占用,proxy/keepalive 等会额外消耗)。
2. accept/负载均衡选项
listen ... reuseport
; 可在多 worker 下减少竞争(需内核与 Nginx 支持)。对短连接高并发场景尤其有利:
server {
listen 80 reuseport backlog=65535;
...
}
3. keepalive 与超时设置
长时间占用连接会降低并发吞吐,合理设置:
keepalive_timeout 15;
keepalive_requests 100;
send_timeout 10;
client_header_timeout 10;
client_body_timeout 10;
对 API 型短连接可把 keepalive_timeout
设短,对长连接或后端复用则适度放宽。
三、业务层与 Nginx 功能优化
1. 静态资源交给 Nginx:使用 sendfile on; tcp_nopush on; tcp_nodelay on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
sendfile
减少内核拷贝,tcp_nopush
与 tcp_nodelay
配合提升大文件传输效率。
2. gzip/压缩:开启但避免过度消耗 CPU
gzip on;
gzip_min_length 1024;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
对 CPU 受限的实例,考虑使用 CDN 做静态压缩。
3. 缓存与缓存层(proxy_cache / fastcgi_cache)
对动态页面或 API,启用 proxy_cache
可极大降低后端压力。示例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:100m max_size=10g inactive=60m use_temp_path=off;
server {
location /api/ {
proxy_cache mycache;
proxy_cache_valid 200 302 60s;
proxy_cache_valid 404 1m;
proxy_cache_key "$scheme://$host$request_uri";
proxy_pass http://backend;
}
}
注意缓存失效与一致性策略(Cache-Control、Surrogate-Key)。
4. upstream 设置与连接复用
对后端长连接,启用 keepalive
:
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
keepalive 32;
}
并在 proxy_http_version 1.1; proxy_set_header Connection ""
; 以启用复用。
5. 限流与保护机制(防止雪崩)
使用 limit_req_zone/limit_conn_zone
控制突发流量:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_req zone=one burst=20 nodelay;
配合 limit_conn 做并发连接限制,防止单 IP 独占资源。
四、TLS/SSL 优化(HTTPS 必备)
1. 使用现代的 TLS 配置,启用会话缓存与票据(session cache / session tickets),减少握手开销:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
ssl_buffer_size 4k;
2. 启用 OCSP Stapling 可减少客户端到 CA 的查询延迟(需证书支持)。
3. 若支持 HTTP/2,启用以改善多路复用(但注意 HTTP/2 与某些中间件兼容性问题)。对于超高并发短连接场景,也可评估 QUIC/HTTP3(取决于 Nginx 版本与模块)。
五、横向扩展与网络层方案
单台服务器有上限,建议结合以下架构手段:
CDN:将静态资源与热点缓存到边缘,香港可优先选择在港有 PoP 的 CDN 提升本地与周边访问速度。
负载均衡(L4/L7):使用 LVS、HAProxy 或云厂商的 LB 做流量分发,前端做健康检查与会话保持策略。
多机房/多可用区:对跨境业务,考虑在香港和中国内地或东南亚部署边缘节点,降低延迟并做容灾。
服务拆分与微缓存:将高并发的静态与不经常变化的接口单独拆出并加缓存层。
Nginx 高并发优化是系统工程:别把所有希望寄托在单一配置项。先从可量化的指标入手(并发、RPS、P95 延迟),在测试环境复现实验,再逐步推广到生产。对香港服务器来说,网络延迟与多源流量特性尤为关键——合理利用 CDN、负载均衡与缓存,结合内核与 Nginx 的调优,能在节省成本的同时显著提升并发承载能力。