在 CentOS 上配置多个域名指向不同网站,通常是通过 Web 服务器(如 Nginx 或 Apache)的虚拟主机(Virtual Host)功能实现的。以下是基于 Nginx 和 Apache 两种主流方案的详细步骤。
✅ 前提条件
- 已安装并运行 Nginx 或 Apache
- 域名已正确解析到服务器 IP(DNS A/AAAA 记录)
- 每个网站有独立的代码目录(如
/var/www/site1,/var/www/site2) - 拥有 root 或 sudo 权限
🌐 方案一:使用 Nginx 配置多域名虚拟主机
1. 创建网站目录与内容示例
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
echo "<h1>Site 1</h1>" | sudo tee /var/www/site1/html/index.html
echo "<h1>Site 2</h1>" | sudo tee /var/www/site2/html/index.html
2. 创建 Nginx 站点配置文件
sudo nano /etc/nginx/conf.d/site1.conf
添加以下内容(替换 example1.com 和 site1 路径):
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/site1/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
再创建第二个站点配置:
sudo nano /etc/nginx/conf.d/site2.conf
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/site2/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
3. 测试并重启 Nginx
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx # 重载配置(无需完全重启)
# 或
sudo systemctl restart nginx
4. 验证访问
在浏览器中访问:
http://example1.com→ 显示 “Site 1”http://example2.com→ 显示 “Site 2”
💡 若需 HTTPS,可结合 Let’s Encrypt(certbot)为每个域名单独申请证书,并在
server块中添加ssl_certificate等指令。
🌐 方案二:使用 Apache 配置多域名虚拟主机
1. 确保模块启用(CentOS 7/8 默认已启用)
# 检查 mod_rewrite 等常用模块
sudo a2enmod rewrite ssl headers # 若使用 Debian/Ubuntu;CentOS 一般无需此步
CentOS 上 Apache 通常直接通过 /etc/httpd/conf.d/ 管理配置。
2. 创建网站目录(同上)
sudo mkdir -p /var/www/site1/public_html
sudo mkdir -p /var/www/site2/public_html
# ... 写入 index.html 同上
3. 创建虚拟主机配置文件
sudo nano /etc/httpd/conf.d/site1.conf
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/site1/public_html
<Directory /var/www/site1/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/site1-error.log
CustomLog /var/log/httpd/site1-access.log combined
</VirtualHost>
再创建 site2.conf:
sudo nano /etc/httpd/conf.d/site2.conf
类似结构,仅修改 ServerName、DocumentRoot 和日志路径。
4. 测试并重启 Apache
sudo apachectl configtest # 或 httpd -t
sudo systemctl restart httpd
5. 验证
同样通过浏览器访问对应域名即可。
🔒 安全建议
- 为每个站点设置独立用户权限(避免所有文件属主为 root)
- 启用防火墙只开放 80/443 端口:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload - 定期更新系统补丁:
sudo yum update
❓常见问题排查
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 访问任意域名都显示同一站 | 未正确配置 server_name 或默认 server block 匹配优先 |
检查配置顺序,确保具体域名配置在前 |
| 403 Forbidden | 目录权限不足或 SELinux 阻止 | chmod -R 755 /var/www/siteX + restorecon -Rv /var/www |
| 404 Not Found | root 路径错误或无 index.html |
检查 DocumentRoot 是否存在及索引文件 |
| HTTPS 不生效 | 未配置 SSL 证书或未监听 443 | 使用 certbot 自动配置,或在 server 块添加 listen 443 ssl |
需要我提供 一键脚本版配置模板、带 HTTPS 的完整示例,或针对 Docker + Nginx 场景的配置吗?欢迎告诉我你的具体需求 😊
PHPWP博客