Linux Apache2虚拟主机设置详细步骤
首先确保系统已安装Apache2。以Ubuntu/Debian为例,执行以下命令:
sudo apt update
sudo apt install apache2
安装完成后,Apache会自动启动。可通过systemctl status apache2确认服务状态。
虚拟主机常用模块需提前启用,包括rewrite(支持URL重写)和ssl(支持HTTPS):
sudo a2enmod rewrite
sudo a2enmod ssl
启用后需重启Apache使模块生效:
sudo systemctl restart apache2
虚拟主机配置文件存放在/etc/apache2/sites-available/目录下,每个站点对应一个.conf文件(如example.com.conf)。使用文本编辑器创建并编辑文件:
sudo nano /etc/apache2/sites-available/example.com.conf
写入以下基础配置(以80端口为例):
<VirtualHost *:80>
ServerAdmin webmaster@example.com # 管理员邮箱
ServerName example.com # 主域名
ServerAlias www.example.com # 别名(可选)
DocumentRoot /var/www/example.com # 网站根目录
<Directory /var/www/example.com>
Options Indexes FollowSymLinks # 允许目录列表和符号链接
AllowOverride All # 允许.htaccess覆盖配置(需mod_rewrite)
Require all granted # 允许所有用户访问(Apache 2.4+)
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined # 访问日志格式
</VirtualHost>
关键参数说明:
ServerName:必须与域名一致,是虚拟主机的核心标识;DocumentRoot:网站文件的存储目录,需提前创建(如/var/www/example.com);AllowOverride All:允许通过.htaccess文件修改配置(如URL重写),若无需此功能可改为None。为避免权限问题,需创建网站根目录并赋予正确权限:
sudo mkdir -p /var/www/example.com # 创建目录(-p递归创建子目录)
sudo chown -R www-data:www-data /var/www/example.com # 将所有者设为Apache用户(www-data)
sudo chmod -R 755 /var/www/example.com # 设置目录权限(755:所有者可读写执行,其他用户可读执行)
目录权限需严格遵循“最小权限原则”,避免使用777(完全开放),防止安全风险。
使用a2ensite命令启用配置文件(将配置链接到sites-enabled/目录):
sudo a2ensite example.com.conf
若需禁用默认虚拟主机(000-default.conf,避免与新站点冲突),可执行:
sudo a2dissite 000-default.conf
在重启前,需检查配置文件语法是否正确:
sudo apache2ctl configtest
若输出Syntax OK,则说明配置无误。重启Apache使更改生效:
sudo systemctl restart apache2
若需重新加载配置(不中断现有连接),可使用:
sudo systemctl reload apache2
虚拟主机生效的前提是域名指向服务器IP。登录DNS提供商管理界面,添加A记录:
@(代表主域名)或www(代表www子域名);A;为提升网站安全性,建议启用SSL证书(以Let’s Encrypt免费证书为例):
sudo apt install certbot python3-certbot-apache # 安装Certbot
sudo certbot --apache -d example.com -d www.example.com # 自动获取并配置证书
Certbot会自动修改Apache配置,添加SSL虚拟主机(监听443端口)。证书有效期为90天,到期前会自动提醒续期,也可手动执行sudo certbot renew续期。
sudo ufw allow 80/tcp; sudo ufw allow 443/tcp);确认DNS解析是否正确(使用ping example.com验证);DocumentRoot目录的所有者为www-data,权限为755;apache2ctl configtest检查,根据提示修复错误。