一台 apache 服务器托管多个网站的方法

Revision as of 16:01, 19 October 2024 by Mwroot (talk | contribs)

一台服务器放多个网站,无外乎子目录、子域名两种方法。

子目录

<VirtualHost *:80>
    ServerName sample.com
    DocumentRoot /var/www/site1
    <Directory /var/www/site1>
        AllowOverride All
        Require all granted
    </Directory>

    Alias /site2 /var/www/site2
    <Directory /var/www/site2>
        AllowOverride All
        Require all granted
    </Directory>

    Alias /site3 /var/www/site3
    <Directory /var/www/site3>
        AllowOverride All
        Require all granted
    </Directory>

    Alias /site4 /var/www/site4
    <Directory /var/www/site4>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

子域名

<VirtualHost *:80>
    ServerName site1.sample.com
    DocumentRoot /var/www/site1
    <Directory /var/www/site1>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.sample.com
    DocumentRoot /var/www/site2
    <Directory /var/www/site2>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName site3.sample.com
    DocumentRoot /var/www/site3
    <Directory /var/www/site3>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName site4.sample.com
    DocumentRoot /var/www/site4
    <Directory /var/www/site4>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

这种方法的要点在于厘清三个没人说但很符合直觉的共识:

  1. 如果有多个 xxx.conf,则 apache 会按照首字母排序读取第一个配置
  2. 如果想一个域名的子目录下托管多个网站,实现的方式则是第一个默认读取,后续的通过 Alias /subdirectory 读取
  3. DocumentRoot 是 index.html 或 index.php 的目录