共享主机和VPS怎么选?四个迁移信号
共享主机与VPS的关键不是速度,而是root权限和故障责任。了解静态网站为何共享主机更合适,以及出现哪四个信号时应迁移到VPS。
共享主机与 VPS:简短答案
共享主机与 VPS 的区别不是速度。在共享主机上,您租用的是一台由其他人配置和修补、并由数百名客户共同使用的服务器上的账户。在 VPS(虚拟专用服务器)上,您租用的是一个拥有 root 访问权限的完整操作系统,因此可以安装所需的软件,也需要自行修复因操作失误造成的问题。
两者主要有三点不同。您是否拥有 root 权限。内存是分配给您的,还是从共享资源池中借用的。服务器在午夜停止响应时,是由主机商修复,还是由您自行处理。功能对比表中的所有差异都源于这三点。
如果您的网站只有页面、图片和联系表单,共享主机就是正确选择,而且成本更低。如果您的网站需要一个在无人访问时仍持续运行的程序,则需要 VPS。
共享主机实际提供什么
一台 Linux 服务器同时运行许多客户账户。每个账户包含一个主目录、一个文档根目录、一个数据库和一个邮箱。服务器上的单个 Web 服务器通常是 Apache 或 LiteSpeed,为所有网站提供服务。您使用控制面板代替 Shell 提示符。您没有 root 权限,因此无法安装软件包、开放端口或启动后台服务。
大多数共享主机运行 CloudLinux。它会将每个账户放入独立容器,并严格限制该账户可使用的 CPU 时间和同时运行的进程数。超过进程数上限不会导致网站变慢,而会使服务器返回显示 508 Resource Limit Is Reached 的错误页面。该页面表示您自己的账户已达到资源上限,而不是邻近账户占用了本应分配给您的资源。
这种取舍是有意设计的。您放弃控制权,主机则负责修补内核、更新 PHP、续期证书并执行每晚备份。对于大量网站而言,这是一种合理的取舍。
VPS 实际上提供了什么
VPS 是运行在宿主服务器上的虚拟机。在 KVM 下(大多数 Linux VPS 方案都使用 KVM 作为底层 hypervisor),您的实例会启动自己的内核,并拥有自己的 IP 地址、防火墙和 init 系统。sudo 可用。apt install 可用。您通过 systemd 启动的程序会在退出登录后继续运行,在崩溃后自动重启,并在系统重启后恢复运行。
正是这种 root 访问权限,使服务器的安全维护成为您的责任。没有其他人会监控它。人们在 VPS 上运行的程序种类之所以广泛,正是因为这一点:这台服务器可以执行 Linux 服务器能够执行的任何任务。
差异 1:root 访问权限及其解锁的功能
root 权限是造成其他所有差异的根本原因。拥有 root 权限后,您可以从发行版安装任意软件包、绑定任意端口、编写 systemd 单元、读取服务器上的所有日志,并使用 sysctl 修改内核设置。没有 root 权限时,您只能使用控制面板提供的功能:PHP 版本选择器、固定的扩展集合,以及用于配置 cron 作业的表单。
在 VPS 上,您始终可以查询服务器当前监听的端口:
ss -ltnp每一行表示一个开放套接字及其所属进程,因此启动失败的服务会表现为缺少对应的一行。在共享主机上,这个问题无法得到答案,因为 80 和 443 端口属于主机的 Web 服务器,您编写的任何程序都无法占用这些端口。
差异 2:分配的内存与借用的内存
共享主机的销售前提是:同一时刻只有少数账户处于繁忙状态。服务器内存是一个共享池,您的账户可使用的内存上限并不等于专属预留。当达到该上限时,PHP 进程会被终止,访客会收到 500 或 508 错误。
在 VPS 上,套餐中分配的内存属于您的实例。free -m 会报告内存使用情况,虚拟机外部的进程无法占用这部分内存。
处理器时间是一个明确的例外。大多数 VPS 套餐会在多个来宾实例之间共享物理核心,您可以自行测量这一点:
vmstat 1 5st 列表示 steal time:您的虚拟处理器已准备运行,但物理核心被分配给另一个来宾实例的时间占比。持续为几个百分点通常属于正常情况。持续达到两位数,说明宿主机超额分配了资源;您可以在支持工单中引用这一数值。共享主机没有等效的读数,因为显示该数值的工具都需要 root 权限。存储的情况相同,因此 VPS 套餐背后的磁盘类型 很重要;这也是为什么在购买新 VPS 后的第一周内,值得 自行测量新 VPS,而不是完全相信销售页面。
差异 3:出现故障时由谁负责
在共享主机上,主机服务商负责操作系统、Web 服务器、PHP 构建版本、证书和每晚备份。机器停止响应时,您可以提交工单,服务商已经有人着手处理。代价也来自同一项规则:您不能要求服务商安装其不支持的软件。
在非托管 VPS 上,服务商负责管理程序、网络和电源。从内核向上的所有内容都由您负责。安全更新、防火墙、备份、证书续期和监控都由您处理,支持人员不会登录服务器调试 Web 服务器配置。您应从第一天开始规划这些工作:新 VPS 上的前十分钟,然后是您了解其配置的防火墙、自动安全更新以及至少恢复过一次的备份。
共享主机适用的场景
宣传型网站是最典型的场景:包含若干页面、图片、联系表单,可能还运行带缓存插件的 WordPress,每天访问量为几千次。不运行后台任务。没有特殊的运行时环境。请求之间不需要将任何内容保留在内存中。共享主机可以很好地承载此类网站,成本低于任何 VPS,并且由专职人员负责维护。将其迁移到 VPS 不会带来任何收益,反而会增加一项原本不存在的工作。
还有一种较少被关注的情况。如果您这边没有人愿意读取日志文件或运行 apt upgrade,共享主机是更安全的选择。未打补丁且开放数据库端口的 VPS,结果会比由专业人员持续维护的共享主机账户更糟。只有在有人实际使用时,控制权才有价值。
迹象 1:您需要一个持续运行的程序
守护进程是在内存中持续运行并等待任务的程序,例如 API、聊天机器人、队列工作进程和游戏服务器。共享主机只会在收到请求时运行您的代码;您在 SSH(安全 Shell)会话中启动且保持运行的任何程序都会被终止,因为长期运行的进程会占用账户的进程数上限。
在 VPS 上,同一个程序会成为一个 systemd 单元:
sudo systemctl enable --now myapp
systemctl status myappsystemctl status 应输出 Active: active (running) 以及进程 ID。如果输出 Active: failed (Result: exit-code),原因位于 journalctl -u myapp -n 50 中;该内容会显示程序在停止时输出的自身日志。单元文件中的 Restart=always 会在程序崩溃后将其重新启动,enable 会在系统重启后将其重新启动。编写 systemd 服务和计时器是最值得首先认真掌握的 VPS 技能。
迹象 2:您需要面板不提供的运行时
面板只提供一个列表。如果应用需要列表之外的语言版本、必须编译的库、ffmpeg、无头浏览器,或 MySQL 之外的数据库,共享主机没有安装这些组件的位置。安装软件需要 root 权限,而该账户没有编译器和开发头文件,因此构建在生成任何结果之前就会失败。
在 VPS 上,您可以使用 apt install 安装它,或在容器中运行它,同时保持主机环境整洁。当应用包含多个相互协作的组件时,通常使用 VPS 上的 Docker Compose。
迹象 3:您的 cron 任务必须按时运行
共享主机通过表单接受 cron 任务,并设置最短运行间隔,通常为 5 或 15 分钟。如果任务运行时间超过账户的处理器限制,系统会在任务执行到一半时将其终止。由于不会写入您有权限读取的日志,任务会静默失败。
在 VPS 上,crontab -e 接受您设置的任意计划,而 systemd timer 更适合:
systemctl list-timers
journalctl -u cron -n 20list-timers 会显示每个 timer 的下次运行时间和上次运行结果,cron 日志则会记录每条命令的执行时间。任务未运行时,您可以判断它是从未启动,还是启动后失败。调试计划任务时,这一区分通常最为关键。
迹象 4:邻居账户正在拖慢您的响应时间
这个症状很明确。同一个页面,在代码没有任何改动的情况下,晚上响应很快,而在晚上七点响应缓慢。先从您自己的机器进行测量,再判断是否应归咎于其他因素:
for i in $(seq 1 20); do curl -o /dev/null -s -w '%{time_starttransfer}\n' https://example.com/; sleep 5; donetime_starttransfer表示响应首字节时间,单位为秒。如果这 20 个数值彼此接近,问题就不在服务器,您应检查代码或数据库查询。如果这些数值在凌晨 3 点很稳定,而在高峰时段波动达到数百毫秒,说明您与无法查看其账户的其他用户共用一台繁忙的机器。这是唯一无法通过改进代码解决的触发因素,因为原因位于账户边界的另一侧。
这次迁移的实际成本
以下是截至 2026 年 8 月各类别最小方案的典型公开价格。请将其作为价格范围参考,而不是正式报价。购买前请确认当前价格。
The data behind this chart
[
{
"plan": "Shared hosting",
"first_term_usd": 3,
"renewal_usd": 12
},
{
"plan": "VPS, 1 vCPU 1 GB",
"first_term_usd": 5,
"renewal_usd": 6
},
{
"plan": "VPS, 2 vCPU 4 GB",
"first_term_usd": 12,
"renewal_usd": 15
},
{
"plan": "Managed VPS, 2 vCPU 4 GB",
"first_term_usd": 25,
"renewal_usd": 30
}
]表面上的价格差距是每月 3 到 5 美元,但这不是决定因素。共享主机公布的是首期价格,通常要求预付 1 到 3 年,续费价格接近 12 美元。将续费价格相互比较后,情况会发生变化:共享主机账户每月 12 美元,而入门级 VPS 每月 6 美元。
比较时请注意,两者的配置并不相同。1 vCPU、1 GB 的 VPS 需要在一台小型服务器上同时运行 Web 服务器和数据库。实际流量上来后,这对 WordPress 来说配置偏紧。与续费后的共享主机进行合理对比,应选择每月约 15 美元的 2 vCPU、4 GB 方案。因此,实际溢价是每月几美元,而不是数倍。
更大的成本不会出现在账单上。VPS 需要额外投入 1 小时进行初始配置,每月花几分钟更新软件,还要在首次出现故障时投入一个晚上处理问题。按您自己的小时费率计算后,差距会迅速缩小。VPS 的实际成本将更详细地介绍不同配置的成本。
无需丢失流量,将网站迁出共享主机
- 提前一天,将域名的 DNS(域名系统)TTL(生存时间)降至 300 秒,这样切换可在几分钟内生效,而不是等待数小时。
- 构建新服务器,并在修改 DNS 之前,通过其 IP 地址确认网站正常运行。
- 复制文件,然后导出数据库,并将其恢复到新服务器。
- 使用笔记本电脑的 hosts 文件进行测试。该文件只会在您的计算机上将域名指向新 IP。
- 在新服务器上签发 TLS(传输层安全)证书,修改 A 记录,并让共享主机账户继续运行一周。
dig example.com A +noall +answer
rsync -avz ~/public_html/ deploy@203.0.113.10:/srv/www/example.com/
mysqldump --single-transaction -u dbuser -p dbname > site.sqldig 会在其响应的第二列输出 TTL,因此您可以在切换前确认较低的值已经生效。--single-transaction 可创建一致的快照,而不会锁定表。如果旧网站仍在处理订单,这一点很重要。在新服务器上,应在当天完成证书配置:DNS 记录指向该服务器后,在 Ubuntu 上使用 nginx 配置 Let's Encrypt 只需几分钟。
无需承担维护责任的资源
如果以上四个迹象都符合您的网站,但您不想负责维护,那么托管 VPS 是中间选项。您仍可使用分配的内存和 root 级权限,服务商则负责补丁更新、监控,通常还会提供管理面板。上图显示,同等规格的非托管 VPS 续费价格约为 30 美元,而托管 VPS 约为 15 美元。多出的费用,换来的是服务器在夜间停止响应时有人处理。
如果您符合这种情况,下一篇应阅读 托管 VPS 与非托管 VPS 的选择。如果您已经在运行一台繁忙的 VPS,并且在高峰时段仍然受到资源争用影响,那么下一步就是 完全没有邻居的独立服务器。
FAQ
VPS 比共享主机快吗?
不一定。负载较低的共享服务器,可能比 1 vCPU 的 VPS 更快地返回单个 WordPress 页面。VPS 提供的是性能一致性:套餐中的内存由您独占,因此响应时间取决于您的代码,而不是取决于服务器上最繁忙的账户。如果您的页面在 3am 和 7pm 都很慢,原因就在代码或数据库查询中;将相同代码迁移到 VPS,只会把问题一并带过去。
我可以在共享主机上运行 Node.js 或 Python 应用吗?
有时可以,但限制很严格。某些控制面板会通过 Passenger 为您启动应用,并在收到请求时运行。您不能绑定自己的端口,因为主机的 Web 服务器占用 80 和 443。您也不能让 worker 在请求之间常驻内存,因为账户的进程数限制会终止任何长期运行的进程。Bot、队列 worker 或 WebSocket 服务器需要 VPS。
运行 VPS 需要了解 Linux 吗?
如果是非托管 VPS,需要。您需要使用 SSH 密钥、防火墙、更新和备份,并养成查看日志的习惯。首次设置预留 1 小时,之后每月只需几分钟。如果您不想承担这些工作,托管方案会保留分配给您的资源,并将维护工作交给提供商;这正是托管与非托管 VPS 主机所涵盖的取舍。
从共享主机迁移到 VPS 时,我的网站会宕机吗?
如果您先降低 DNS TTL,并让两个账户同时运行,就不会。提前一天将 TTL 设置为 300 秒,复制文件和数据库,通过笔记本电脑的 hosts 文件测试新服务器,然后修改 A 记录。在几分钟内,部分访客会访问旧服务器,部分访客会访问新服务器,因此请让共享账户继续运行 1 周。在最后导出数据库期间将网站设为只读模式,否则需要接受丢失这段时间内写入的数据。