合理配置Nginx虚拟主机可显著降低内存占用,核心在于避免重复加载、精简模块、共享SSL缓存与监听端口、统一日志设置、删除冗余location及注释,并合理设定worker进程与连接数。

合理配置Nginx虚拟主机能显著降低内存占用,关键不在于“开多少个站点”,而在于避免重复加载、精简模块、共享资源和按需启用。
复用监听端口与共享SSL会话缓存
多个域名共用同一server块或统一监听配置,可减少worker进程维护的连接状态数。特别是HTTPS站点,应避免为每个域名单独配置ssl_session_cache——统一设置在http块中,例如:
- 使用
ssl_session_cache shared:SSL:10m(10MB可缓存约4万会话) - 配合
ssl_session_timeout 4h,避免频繁重建TLS会话 - 多个
server块复用同一listen 443 ssl http2,不重复定义证书路径(除非SNI必需)
精简server块内非必要指令
每个server块都会被worker进程加载进内存,冗余配置会累积开销。重点关注:
- 删除未使用的
location块(如遗留的/phpmyadmin或测试路径) - 避免在每个
server中重复写access_log off或log_not_found off,改在http块统一设置 - 静态文件服务优先用
try_files而非rewrite,减少正则编译与运行时匹配消耗
按需加载模块,禁用无用功能
Nginx编译时启用的模块(如ngx_http_perl_module、ngx_http_xslt_filter_module)即使未配置也会占用基础内存。生产环境应:
- 使用
nginx -V确认实际加载模块,移除未用模块后重新编译 - 关闭
gzip_vary on等低价值选项(除非CDN明确要求) - 禁用
underscores_in_headers on等调试型配置,减少请求头解析负担
控制worker进程与连接数的合理配比
虚拟主机数量增多时,单个worker进程承载过多server块会导致内存碎片上升。建议:
- 将
worker_processes设为CPU核心数,而非auto(避免容器等受限环境误判) worker_connections不宜盲目调高;2048–4096足够支撑数百个轻量虚拟主机- 配合
multi_accept off,让worker更均衡地分发连接,减少单进程内存峰值
不复杂但容易忽略:每多一个server块,Nginx启动时就多解析一组指令上下文;合并同类站点、统一日志与缓存策略、删掉注释和测试配置,往往比调优参数更能立竿见影地节省内存。

















