下面我将从基本原理、主流实现方式、详细步骤、注意事项和高级技巧五个方面,为你详细解释如何在一个空间上管理多个 PHP 网站。

基本原理:如何区分多个网站?
服务器上的 Web 服务器软件(最常见的是 Apache 和 Nginx)通过两种主要方式来区分不同的网站,并将访问请求指向正确的目录:
-
基于域名(最常用):
- 原理:当用户在浏览器中输入
www.siteA.com时,浏览器会请求这个域名,服务器的 Web 服务器软件会检查 HTTP 请求头中的Host字段,发现是www.siteA.com,然后就去服务器上配置好的siteA目录里寻找对应的文件。 - 场景:你有多个不同的域名,每个域名对应一个独立的网站。
- 原理:当用户在浏览器中输入
-
基于子域名:
- 原理:与基于域名类似,但使用的是同一个主域名的子域名。
blog.mydomain.com和shop.mydomain.com都指向同一个服务器。 - 场景:你希望将不同功能模块(如博客、商店、论坛)放在同一个主域名下,但又想保持它们文件的独立性。
- 原理:与基于域名类似,但使用的是同一个主域名的子域名。
-
基于目录/路径:
(图片来源网络,侵删)- 原理:所有网站都共享同一个域名,但通过 URL 路径来区分。
www.mydomain.com/siteA和www.mydomain.com/siteB。 - 场景:较少用于完全独立的网站,更多用于将多个小型应用或项目整合在一个域名下。
- 原理:所有网站都共享同一个域名,但通过 URL 路径来区分。
主流实现方式
根据你的服务器控制权限,主要有两种实现方式:
共享主机(最简单,适合初学者)
这是最常见的方式,你购买的是由服务商(如 Bluehost, SiteGround, 阿里云/腾讯云的虚拟主机产品)已经配置好的空间,你不需要关心底层配置,服务商通常会提供一个控制面板(如 cPanel, Plesk, 宝塔面板)来管理你的网站。
- 优点:简单、便宜、无需技术维护。
- 缺点:资源有限、灵活性差、与其他用户共享服务器资源。
VPS 或云服务器(最灵活,适合进阶)
你租用的是一个虚拟专用服务器,拥有 root 权限,可以完全自由地配置服务器环境(如安装 Apache/Nginx, PHP, MySQL 等),你需要自己动手进行配置,或者使用宝塔面板这样的工具来简化操作。
- 优点:资源独享、高度灵活、可定制性强。
- 缺点:需要一定的技术知识,维护成本相对较高。
详细操作步骤
这里我们以最常用的基于域名的虚拟主机为例,分别介绍在 cPanel (共享主机) 和 Nginx (VPS/云服务器) 下的配置方法。

场景假设:
- 网站 A:
www.siteA.com,文件存放在/home/user/public_html/siteA - 网站 B:
www.siteB.com,文件存放在/home/user/public_html/siteB
使用 cPanel (共享主机)
这是最简单的方法,cPanel 已经为你自动化了所有配置。
- 上传文件:使用 FTP 或 cPanel 的“文件管理器”,将
siteA的所有文件上传到public_html/siteA目录,将siteB的文件上传到public_html/siteB目录。 - 添加域名/子域名:
- 登录你的 cPanel。
- 找到 “域名” 或 “子域域” 区域。
- 添加主域名:在“域”输入框中输入
siteA.com,文档根目录 会自动填充为/home/user/public_html/siteA,点击“提交”,cPanel 会自动完成 DNS 解析和虚拟主机配置。 - 添加第二个域名:同样地,输入
siteB.com,文档根目录会自动填充为/home/user/public_html/siteB,点击“提交”。
- 等待生效:DNS 解析可能需要几分钟到几小时才能生效,生效后,访问
www.siteA.com就会看到siteA的内容,访问www.siteB.com就会看到siteB的内容。
注意:cPanel 通常会将主域名(如 siteA.com)的根目录指向 public_html,如果你想让 siteA.com 直接指向 public_html/siteA,你可以在添加域名时指定,或者将 public_html 下的文件移动到 public_html/siteA,然后将 siteA.com 指向 public_html/siteA。
使用 Nginx (VPS/云服务器)
如果你有服务器的 root 权限,直接编辑 Nginx 配置文件是更灵活的方式。
-
上传文件:同样,将网站文件通过 SFTP/SCP 上传到服务器的指定目录,
/var/www/siteA和/var/www/siteB。 -
创建 Nginx 配置文件: 在
/etc/nginx/sites-available/目录下为每个网站创建一个配置文件。-
为 siteA 创建配置文件
sudo nano /etc/nginx/sites-available/siteA.comserver { listen 80; server_name www.siteA.com siteA.com; # 可以同时写主域名和www子域名 root /var/www/siteA; # 网站根目录 index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } # 重要:处理 PHP 请求 location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 注意这里的 PHP 版本和 socket 路径可能不同 } } -
为 siteB 创建配置文件
sudo nano /etc/nginx/sites-available/siteB.com类似,只需修改server_name和root路径。
-
-
启用站点: Nginx 有一个
sites-enabled目录,存放的是实际启用的配置文件,我们通过创建软链接来启用站点。# 启用 siteA sudo ln -s /etc/nginx/sites-available/siteA.com /etc/nginx/sites-enabled/ # 启用 siteB sudo ln -s /etc/nginx/sites-available/siteB.com /etc/nginx/sites-enabled/
-
测试并重启 Nginx: 在重启服务前,务必测试配置文件是否有语法错误。
# 测试配置 sudo nginx -t # 如果显示 "test is successful",则重启服务 sudo systemctl restart nginx
-
配置 DNS: 确保你的域名解析(DNS)指向你的 VPS/云服务器的公网 IP 地址。
重要注意事项和最佳实践
-
PHP 版本隔离:
- 共享主机:cPanel 会为每个账户提供一个“选择 PHP 版本”的选项,你可以为每个网站单独设置其运行的 PHP 版本。
- VPS/云服务器:你需要为每个网站配置不同的 PHP-FPM 池,这涉及到为每个网站创建独立的
.conf文件在/etc/php/8.1/fpm/pool.d/目录下,并指定不同的listensocket 和user/group,这是高级配置,但能实现完美的隔离和资源控制。
-
数据库隔离:
- 每个网站必须使用独立的数据库,绝不能让多个网站共享同一个数据库,这会带来巨大的安全风险和数据混乱。
- 在安装每个网站(如 WordPress)时,为其创建一个新的数据库和数据库用户,并授予该用户对相应数据库的
ALL PRIVILEGES。
-
配置文件隔离:
- 像 WordPress 的
wp-config.php文件中存储了数据库信息,确保每个网站的配置文件都指向它自己的数据库。
- 像 WordPress 的
-
防止文件权限冲突:
确保每个网站文件的用户和组权限设置正确,在 VPS 上,通常建议为每个网站创建一个独立的 Linux 用户,并设置文件所有者,这样即使一个网站被攻破,攻击者也很难影响到其他网站。
-
使用 SSL 证书:
为每个域名申请并安装 SSL 证书(可以使用 Let's Encrypt 免费证书),启用 HTTPS,这不仅能提升安全性,也是现代网站的标配。
-
定期备份:
制定一个备份策略,定期备份所有网站的文件和数据库,可以将备份存储在另一个服务器或云存储上。
高级技巧:使用多目录解析
如果你只有一个域名,但想在一个空间里放多个项目,可以通过修改 public_html 目录下的 .htaccess 文件(Apache)或 Nginx 配置来实现。
示例(Apache .htaccess):
将 siteA 和 siteB 的文件都放在 public_html 下,然后通过 URL 路径来访问。
# public_html/.htaccess
RewriteEngine On
# 访问 /siteA 时,重写到 /siteA/ 目录
RewriteRule ^siteA(/.*)?$ /siteA$1 [L]
# 访问 /siteB 时,重写到 /siteB/ 目录
RewriteRule ^siteB(/.*)?$ /siteB$1 [L]
这样,访问 www.mydomain.com/siteA 就会显示 public_html/siteA 的内容。
| 特性 | 共享主机 | VPS/云服务器 |
|---|---|---|
| 配置方式 | 通过 cPanel/Plesk 等控制面板(图形化) | 手动编辑配置文件(Nginx/Apache) |
| 灵活性 | 低,受服务商限制 | 高,完全自定义 |
| 技术要求 | 无需技术知识 | 需要服务器管理知识 |
| 成本 | 低 | 高 |
| 适用人群 | 初学者、小型网站、预算有限者 | 开发者、有经验的站长、对性能和隔离性要求高的用户 |
对于绝大多数个人用户和小型企业来说,购买一个支持多域名的共享主机套餐是最简单、最经济、最省心的选择,只有当你对性能、隔离性和控制力有更高要求时,才需要考虑自己搭建 VPS 环境。
