插件窝 干货文章 Apache虚拟主机配置方法,实现多站点部署

Apache虚拟主机配置方法,实现多站点部署

example Apache com 虚拟主机 633    来源:    2025-04-02

Apache虚拟主机配置实现多站点部署

Apache虚拟主机(Virtual Host)允许在一台服务器上运行多个网站,每个网站可以有不同的域名、内容和配置。以下是详细的配置方法:

1. 基于名称的虚拟主机(Name-based Virtual Host)

这是最常用的方法,通过不同的域名来区分不同的网站。

配置步骤:

  1. 确保Apache已安装并运行

    sudo apt-get install apache2  # Ubuntu/Debian
    sudo yum install httpd        # CentOS/RHEL
    
  2. 启用虚拟主机模块

    sudo a2enmod vhost_alias     # Ubuntu/Debian
    

    在CentOS/RHEL中,该模块通常默认已启用。

  3. 创建网站目录

    sudo mkdir -p /var/www/example1.com/public_html
    sudo mkdir -p /var/www/example2.com/public_html
    
  4. 设置目录权限

    sudo chown -R $USER:$USER /var/www/example1.com/public_html
    sudo chown -R $USER:$USER /var/www/example2.com/public_html
    sudo chmod -R 755 /var/www
    
  5. 创建测试页面

    为每个网站创建index.html文件:

    echo "<h1>Welcome to Example1.com</h1>" > /var/www/example1.com/public_html/index.html
    echo "<h1>Welcome to Example2.com</h1>" > /var/www/example2.com/public_html/index.html
    
  6. 创建虚拟主机配置文件

    在Ubuntu/Debian中:

    sudo nano /etc/apache2/sites-available/example1.com.conf
    

    添加以下内容:

    <VirtualHost *:80>
       ServerAdmin admin@example1.com
       ServerName example1.com
       ServerAlias www.example1.com
       DocumentRoot /var/www/example1.com/public_html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    类似地创建example2.com的配置文件。

  7. 启用虚拟主机

    sudo a2ensite example1.com.conf
    sudo a2ensite example2.com.conf
    
  8. 禁用默认站点

    sudo a2dissite 000-default.conf
    
  9. 测试配置并重启Apache

    sudo apache2ctl configtest
    sudo systemctl restart apache2
    

2. 基于IP的虚拟主机(IP-based Virtual Host)

如果服务器有多个IP地址,可以为每个网站分配不同的IP。

配置示例:

<VirtualHost 192.168.1.1:80>
    ServerAdmin admin@example1.com
    ServerName example1.com
    DocumentRoot /var/www/example1.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost 192.168.1.2:80>
    ServerAdmin admin@example2.com
    ServerName example2.com
    DocumentRoot /var/www/example2.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

3. 基于端口的虚拟主机(Port-based Virtual Host)

使用不同的端口来区分不同的网站。

配置示例:

  1. 首先在/etc/apache2/ports.conf中添加监听端口:

    Listen 80
    Listen 8080
    
  2. 然后配置虚拟主机:

    <VirtualHost *:80>
       ServerName example1.com
       DocumentRoot /var/www/example1.com/public_html
    </VirtualHost>
    
    <VirtualHost *:8080>
       ServerName example2.com
       DocumentRoot /var/www/example2.com/public_html
    </VirtualHost>
    

4. SSL/TLS配置(HTTPS)

为虚拟主机添加SSL证书:

  1. 安装SSL模块:

    sudo a2enmod ssl
    
  2. 创建或获取SSL证书

  3. 配置SSL虚拟主机:

    <VirtualHost *:443>
       ServerName example1.com
       DocumentRoot /var/www/example1.com/public_html
    
       SSLEngine on
       SSLCertificateFile /path/to/cert.pem
       SSLCertificateKeyFile /path/to/privkey.pem
       SSLCertificateChainFile /path/to/chain.pem
    </VirtualHost>
    

5. 常见问题解决

  1. 403 Forbidden错误

    • 检查目录权限
    • 确保Apache用户(www-data或apache)有读取权限
    • 检查SELinux设置(在CentOS/RHEL上)
  2. 虚拟主机不生效

    • 确保已启用虚拟主机配置
    • 检查ServerName是否正确
    • 确保DNS解析正确
  3. 配置测试

    sudo apache2ctl configtest
    
  4. 查看错误日志

    tail -f /var/log/apache2/error.log
    

通过以上步骤,您可以在一台Apache服务器上成功部署多个网站。根据实际需求选择基于名称、IP或端口的虚拟主机配置方式。