2026年Linux LAMP环境下Apache虚拟主机配置完整指南(2026)

一、什么是Apache虚拟主机?

Apache虚拟主机(Virtual Host)是指在一台物理服务器上运行多个网站的技术。通过虚拟主机,您可以用一台服务器同时托管多个域名(如 example.com、test.com、blog.example.com)。

核心优势
– 💰 降低成本:一台服务器托管多个网站
– 🎯 资源高效利用:充分利用服务器资源
– 🔧 管理便捷:统一管理和维护
– 📈 灵活扩展:随时添加/删除网站

二、虚拟主机类型

类型 原理 适用场景
基于域名 根据HTTP请求头中的域名区分 最常用,适合大多数场景
基于IP 根据访问的IP地址区分 需要多个独立IP的场景
基于端口 根据访问的端口区分 内部测试、特殊应用

三、环境准备

3.1 安装LAMP环境

# Ubuntu/Debian
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql -y

# CentOS/RHEL
sudo yum install httpd mariadb-server php php-mysql -y
sudo systemctl start httpd
sudo systemctl enable httpd

3.2 检查Apache状态

# Ubuntu/Debian
sudo systemctl status apache2

# CentOS/RHEL
sudo systemctl status httpd

# 测试Apache是否正常运行
curl http://localhost

四、配置基于域名的虚拟主机(推荐)

4.1 创建网站目录

# 创建网站根目录
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

# 设置权限
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html
sudo chmod -R 755 /var/www

# 创建测试页面
echo "<h1>Welcome to example.com</h1>" > /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" > /var/www/test.com/public_html/index.html

4.2 创建虚拟主机配置文件

Ubuntu/Debian (/etc/apache2/sites-available/example.com.conf):

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

CentOS/RHEL (/etc/httpd/conf.d/example.com.conf):

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/example.com_error.log
    CustomLog /var/log/httpd/example.com_access.log combined
</VirtualHost>

4.3 配置第二个网站

创建 /etc/apache2/sites-available/test.com.conf(Ubuntu/Debian):

<VirtualHost *:80>
    ServerAdmin webmaster@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

4.4 启用虚拟主机

Ubuntu/Debian

# 启用虚拟主机配置
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

# 禁用默认站点(可选)
sudo a2dissite 000-default.conf

# 测试配置
sudo apache2ctl configtest

# 重启Apache
sudo systemctl restart apache2

CentOS/RHEL

# 测试配置
sudo httpd -t

# 重启Apache
sudo systemctl restart httpd

五、本地测试(无域名时)

5.1 修改本地hosts文件

Linux/Mac (/etc/hosts):

127.0.0.1   example.com
127.0.0.1   test.com

Windows (C:\Windows\System32\drivers\etc\hosts):

127.0.0.1   example.com
127.0.0.1   test.com

5.2 测试访问

# 测试第一个网站
curl http://example.com

# 测试第二个网站
curl http://test.com

六、配置SSL/HTTPS(Let’s Encrypt)

6.1 安装Certbot

# Ubuntu/Debian
sudo apt install certbot python3-certbot-apache -y

# CentOS/RHEL
sudo yum install certbot python3-certbot-apache -y

6.2 获取SSL证书

# 为example.com获取证书
sudo certbot --apache -d example.com -d www.example.com

# 为test.com获取证书
sudo certbot --apache -d test.com -d www.test.com

6.3 自动续期

# 测试自动续期
sudo certbot renew --dry-run

# Certbot会自动添加cron任务或systemd定时器来自动续期

配置SSL后,虚拟主机配置文件会自动更新,添加443端口的虚拟主机配置。

七、配置PHP支持

7.1 测试PHP

创建 info.php 文件:

echo "<?php phpinfo(); ?>" > /var/www/example.com/public_html/info.php

访问 http://example.com/info.php,应显示PHP信息页面。

7.2 配置PHP上传限制

编辑 php.ini

# Ubuntu/Debian
sudo nano /etc/php/8.1/apache2/php.ini

# CentOS/RHEL
sudo nano /etc/php.ini

修改以下配置:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

重启Apache使配置生效。

八、配置URL重写(伪静态)

8.1 启用mod_rewrite

# Ubuntu/Debian
sudo a2enmod rewrite
sudo systemctl restart apache2

# CentOS/RHEL
# mod_rewrite默认已启用

8.2 配置.htaccess

在网站根目录创建 .htaccess 文件:

# 启用URL重写
RewriteEngine On

# 将 www.example.com 重定向到 example.com
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

# 隐藏 index.php(适用于ThinkPHP、Laravel等框架)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

九、性能优化

9.1 启用Apache缓存

# 在虚拟主机配置中添加
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresDefault "access plus 7 days"
</IfModule>

9.2 启用Gzip压缩

# 在虚拟主机配置中添加
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE application/xml
</IfModule>

9.3 配置MPM Prefork(优化并发)

编辑 /etc/apache2/mods-available/mpm_prefork.conf(Ubuntu/Debian):

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      150
    MaxConnectionsPerChild   0
</IfModule>

根据服务器内存调整 MaxRequestWorkers
– 2GB内存:约150
– 4GB内存:约300
– 8GB内存:约600

十、常见问题与解决方案

Q1: 访问网站显示默认页面而非我的网站?

A: 可能原因:
1. 虚拟主机配置未启用:sudo a2ensite example.com.conf
2. 配置语法错误:运行 sudo apache2ctl configtest 检查
3. 未重启Apache:sudo systemctl restart apache2

Q2: 403 Forbidden 错误?

A: 可能原因:
1. 目录权限不正确:运行 sudo chmod -R 755 /var/www
2. SELinux未关闭(CentOS):sudo setenforce 0
3. 配置文件中 Require all granted 缺失

Q3: 域名已解析但无法访问?

A: 检查步骤:

# 1. 检查域名解析
nslookup example.com

# 2. 检查Apache是否监听80端口
sudo netstat -tulpn | grep :80

# 3. 检查防火墙
sudo ufw status  # Ubuntu
sudo firewall-cmd --list-all  # CentOS

Q4: 如何配置HTTPS重定向?

A: 在虚拟主机配置中添加:

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

十一、总结

Apache虚拟主机是LAMP环境下托管多个网站的核心技术。通过基于域名的虚拟主机配置,您可以高效地在一台服务器上运行多个网站。

核心步骤回顾
1. 安装LAMP环境
2. 创建网站目录
3. 配置虚拟主机文件
4. 启用配置并重启Apache
5. 配置SSL证书(推荐)
6. 优化性能和安全性

本文基于2026年主流Linux发行版和Apache 2.4编写,具体配置请参考官方文档。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注