努力
加油

个人博客或小站用宝塔部署,1核1G可以挂多少个域名?

先说结论:1核1G的机器,理论上能挂几十个甚至上百个域名,但“能挂”不等于“能跑”。

真正限制你的不是Nginx/Apache本身,而是内存(RAM)和CPU。在1C1G这种“乞丐配置”下,瓶颈极其明显。我们需要把问题拆解成两个层面来看:静态资源站和动态应用站。

1. 核心瓶颈分析:内存是硬伤

宝塔面板(BT Panel)本身占用约50-80MB内存。
剩下的900多MB,要分给:

  • 操作系统基础服务(SSH, Cron等):~50MB
  • 数据库(MySQL/MariaDB):这是吞内存大户。默认配置如果不优化,起步就是200-300MB。
  • PHP-FPM:每个网站一个进程池。如果并发稍高,或者开了OPcache,内存瞬间告急。
  • Web服务器(Nginx):相对轻量,但处理大量连接时也会吃内存。

如果你挂了太多域名,且都是动态网站(如WordPress、Typecho、Halo等),一旦有几个站同时有访客,MySQL和PHP-FPM就会抢占内存,导致OOM(Out of Memory),服务器直接卡死或重启。

2. 场景一:纯静态博客/小站(HTML/CSS/JS)

如果你的站点全是静态文件,没有数据库交互,也没有复杂的后端逻辑:

  • 推荐数量:10-20个 比较稳妥。
  • 原因:Nginx处理静态文件非常高效,1核CPU完全扛得住几千QPS的静态请求。主要消耗的是磁盘IO和网络带宽。
  • 注意:即使如此,也要确保你的Nginx配置合理,开启Gzip压缩,设置合理的缓存过期时间。不要开过多的并发worker_processes(1核建议设为1或auto)。

3. 场景二:动态博客/内容管理系统(WordPress, Typecho, Halo, etc.)

这是最常见的情况。每个动态站点都需要独立的PHP-FPM进程池和数据库连接。

  • 保守估计:3-5个 中小型WordPress/Typecho站点。
  • 激进估计:8-10个 极简站点(如纯文本博客、无插件的Typecho)。
  • 致命风险点:
    • MySQL配置:必须修改my.cnf,将innodb_buffer_pool_size调小(比如64M-128M),否则MySQL启动就占满内存。
    • PHP-FPM模式:务必使用static或ondemand模式,不要用dynamic。ondemand可以节省空闲时的内存,当有请求时才派生子进程。
    • 禁止重型插件:每个站点尽量精简,避免运行大型电商、论坛等高内存占用程序。

4. 关键优化技巧(让1C1G活下去的关键)

想在1C1G上挂更多域名,必须做以下优化:

A. 数据库优化

# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 64M  # 默认可能更大,必须调小
max_connections = 50           # 不需要太高
query_cache_type = 1           # 老版本MySQL可用,新版MariaDB已移除

B. PHP-FPM 优化

在宝塔面板中,为每个网站设置PHP-FPM进程数:

  • process_count: 设置为 1 或 2
  • start_servers: 1
  • min_spare_servers: 1
  • max_spare_servers: 2
  • max_requests: 500 (定期回收进程防泄漏)

C. Nginx 优化

worker_processes 1;  # 1核CPU设为1
events {
    worker_connections 1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush      on;
    keepalive_timeout 65;

    # 开启gzip,减少带宽占用
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 5;
    gzip_types text/plain application/javascript text/css application/xml;
}

D. 使用Swap(虚拟内存)

这是救命稻草!1C1G机器极易OOM,必须加Swap。

# 创建2G swap文件
dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

⚠️ 注意:Swap会显著降低性能,因为它是写在硬盘上的。但对于低配机器,它是防止崩溃的最后防线。

5. 更优架构建议(进阶)

如果你真的需要托管多个独立域名,且希望稳定性更高,考虑以下方案:

  1. 分离数据库:

    • 将MySQL单独部署在一台更贵的云主机上,或者使用云厂商提供的RDS服务(很多厂商有免费试用或低价入门版)。
    • 1C1G机器只跑Nginx + PHP-FPM。这样可以将域名数量提升到 20+ 个静态/轻动态站点。
  2. 使用容器化(Docker):

    • 虽然Docker本身也有开销,但通过Compose管理,可以更精细地控制每个服务的资源限制(memory limit)。
    • 例如:限制每个MySQL容器最多用100M内存,每个PHP容器最多用50M。
  3. 前端CDN提速:

    • 所有静态资源(图片、CSS、JS)全部上CDN(阿里云、腾讯云、Cloudflare等)。
    • 这样不仅加快访问速度,还大幅减轻源站带宽压力,间接提升可承载域名数。

总结

站点类型 推荐数量 关键条件
纯静态HTML 10-20+ Nginx优化,开启Gzip
轻量动态(Typecho/Halo) 5-8 MySQL内存优化,PHP-FPM静态模式
重度动态(WordPress+插件) 2-3 严格限制MySQL参数,禁用非必要插件
混合部署 5左右 根据实际流量动态调整

最后提醒:1C1G是典型的“实验型”或“个人学习型”配置。不要用于生产环境的高并发业务。定期监控free -m和top命令,观察内存使用情况。当Load Average持续高于0.7,或内存使用率超过85%时,就该考虑升级配置或迁移了。

记住:域名数量不重要,重要的是每个域名的“重量”。一个没优化的WordPress比十个纯静态页面更能拖垮你的1C1G。