凌峰创科服务平台

多PHP网站如何共存于同一空间?

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

多PHP网站如何共存于同一空间?-图1
(图片来源网络,侵删)

基本原理:如何区分多个网站?

服务器上的 Web 服务器软件(最常见的是 Apache 和 Nginx)通过两种主要方式来区分不同的网站,并将访问请求指向正确的目录:

  1. 基于域名(最常用)

    • 原理:当用户在浏览器中输入 www.siteA.com 时,浏览器会请求这个域名,服务器的 Web 服务器软件会检查 HTTP 请求头中的 Host 字段,发现是 www.siteA.com,然后就去服务器上配置好的 siteA 目录里寻找对应的文件。
    • 场景:你有多个不同的域名,每个域名对应一个独立的网站。
  2. 基于子域名

    • 原理:与基于域名类似,但使用的是同一个主域名的子域名。blog.mydomain.comshop.mydomain.com 都指向同一个服务器。
    • 场景:你希望将不同功能模块(如博客、商店、论坛)放在同一个主域名下,但又想保持它们文件的独立性。
  3. 基于目录/路径

    多PHP网站如何共存于同一空间?-图2
    (图片来源网络,侵删)
    • 原理:所有网站都共享同一个域名,但通过 URL 路径来区分。www.mydomain.com/siteAwww.mydomain.com/siteB
    • 场景:较少用于完全独立的网站,更多用于将多个小型应用或项目整合在一个域名下。

主流实现方式

根据你的服务器控制权限,主要有两种实现方式:

共享主机(最简单,适合初学者)

这是最常见的方式,你购买的是由服务商(如 Bluehost, SiteGround, 阿里云/腾讯云的虚拟主机产品)已经配置好的空间,你不需要关心底层配置,服务商通常会提供一个控制面板(如 cPanel, Plesk, 宝塔面板)来管理你的网站。

  • 优点:简单、便宜、无需技术维护。
  • 缺点:资源有限、灵活性差、与其他用户共享服务器资源。

VPS 或云服务器(最灵活,适合进阶)

你租用的是一个虚拟专用服务器,拥有 root 权限,可以完全自由地配置服务器环境(如安装 Apache/Nginx, PHP, MySQL 等),你需要自己动手进行配置,或者使用宝塔面板这样的工具来简化操作。

  • 优点:资源独享、高度灵活、可定制性强。
  • 缺点:需要一定的技术知识,维护成本相对较高。

详细操作步骤

这里我们以最常用的基于域名的虚拟主机为例,分别介绍在 cPanel (共享主机)Nginx (VPS/云服务器) 下的配置方法。

多PHP网站如何共存于同一空间?-图3
(图片来源网络,侵删)

场景假设:

  • 网站 A: www.siteA.com,文件存放在 /home/user/public_html/siteA
  • 网站 B: www.siteB.com,文件存放在 /home/user/public_html/siteB

使用 cPanel (共享主机)

这是最简单的方法,cPanel 已经为你自动化了所有配置。

  1. 上传文件:使用 FTP 或 cPanel 的“文件管理器”,将 siteA 的所有文件上传到 public_html/siteA 目录,将 siteB 的文件上传到 public_html/siteB 目录。
  2. 添加域名/子域名
    • 登录你的 cPanel。
    • 找到 “域名”“子域域” 区域。
    • 添加主域名:在“域”输入框中输入 siteA.com文档根目录 会自动填充为 /home/user/public_html/siteA,点击“提交”,cPanel 会自动完成 DNS 解析和虚拟主机配置。
    • 添加第二个域名:同样地,输入 siteB.com,文档根目录会自动填充为 /home/user/public_html/siteB,点击“提交”。
  3. 等待生效: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 配置文件是更灵活的方式。

  1. 上传文件:同样,将网站文件通过 SFTP/SCP 上传到服务器的指定目录,/var/www/siteA/var/www/siteB

  2. 创建 Nginx 配置文件: 在 /etc/nginx/sites-available/ 目录下为每个网站创建一个配置文件。

    • 为 siteA 创建配置文件 sudo nano /etc/nginx/sites-available/siteA.com

      server {
      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_nameroot 路径。

  3. 启用站点: 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/
  4. 测试并重启 Nginx: 在重启服务前,务必测试配置文件是否有语法错误。

    # 测试配置
    sudo nginx -t
    # 如果显示 "test is successful",则重启服务
    sudo systemctl restart nginx
  5. 配置 DNS: 确保你的域名解析(DNS)指向你的 VPS/云服务器的公网 IP 地址。


重要注意事项和最佳实践

  1. PHP 版本隔离

    • 共享主机:cPanel 会为每个账户提供一个“选择 PHP 版本”的选项,你可以为每个网站单独设置其运行的 PHP 版本。
    • VPS/云服务器:你需要为每个网站配置不同的 PHP-FPM 池,这涉及到为每个网站创建独立的 .conf 文件在 /etc/php/8.1/fpm/pool.d/ 目录下,并指定不同的 listen socket 和 user/group,这是高级配置,但能实现完美的隔离和资源控制。
  2. 数据库隔离

    • 每个网站必须使用独立的数据库,绝不能让多个网站共享同一个数据库,这会带来巨大的安全风险和数据混乱。
    • 在安装每个网站(如 WordPress)时,为其创建一个新的数据库和数据库用户,并授予该用户对相应数据库的 ALL PRIVILEGES
  3. 配置文件隔离

    • 像 WordPress 的 wp-config.php 文件中存储了数据库信息,确保每个网站的配置文件都指向它自己的数据库。
  4. 防止文件权限冲突

    确保每个网站文件的用户和组权限设置正确,在 VPS 上,通常建议为每个网站创建一个独立的 Linux 用户,并设置文件所有者,这样即使一个网站被攻破,攻击者也很难影响到其他网站。

  5. 使用 SSL 证书

    为每个域名申请并安装 SSL 证书(可以使用 Let's Encrypt 免费证书),启用 HTTPS,这不仅能提升安全性,也是现代网站的标配。

  6. 定期备份

    制定一个备份策略,定期备份所有网站的文件和数据库,可以将备份存储在另一个服务器或云存储上。


高级技巧:使用多目录解析

如果你只有一个域名,但想在一个空间里放多个项目,可以通过修改 public_html 目录下的 .htaccess 文件(Apache)或 Nginx 配置来实现。

示例(Apache .htaccess):siteAsiteB 的文件都放在 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 环境。

分享:
扫描分享到社交APP
上一篇
下一篇