Apache虚拟主机(Virtual Host)允许在一台服务器上运行多个网站,每个网站可以有不同的域名、内容和配置。以下是详细的配置方法:
这是最常用的方法,通过不同的域名来区分不同的网站。
确保Apache已安装并运行
sudo apt-get install apache2 # Ubuntu/Debian
sudo yum install httpd # CentOS/RHEL
启用虚拟主机模块
sudo a2enmod vhost_alias # Ubuntu/Debian
在CentOS/RHEL中,该模块通常默认已启用。
创建网站目录
sudo mkdir -p /var/www/example1.com/public_html
sudo mkdir -p /var/www/example2.com/public_html
设置目录权限
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
创建测试页面
为每个网站创建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
创建虚拟主机配置文件
在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的配置文件。
启用虚拟主机
sudo a2ensite example1.com.conf
sudo a2ensite example2.com.conf
禁用默认站点
sudo a2dissite 000-default.conf
测试配置并重启Apache
sudo apache2ctl configtest
sudo systemctl restart apache2
如果服务器有多个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>
使用不同的端口来区分不同的网站。
首先在/etc/apache2/ports.conf
中添加监听端口:
Listen 80
Listen 8080
然后配置虚拟主机:
<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>
为虚拟主机添加SSL证书:
安装SSL模块:
sudo a2enmod ssl
创建或获取SSL证书
配置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>
403 Forbidden错误:
虚拟主机不生效:
配置测试:
sudo apache2ctl configtest
查看错误日志:
tail -f /var/log/apache2/error.log
通过以上步骤,您可以在一台Apache服务器上成功部署多个网站。根据实际需求选择基于名称、IP或端口的虚拟主机配置方式。