在CentOS系统上如何配置多个域名指向不同网站?

在 CentOS 上配置多个域名指向不同网站,通常是通过 Web 服务器(如 Nginx 或 Apache)的虚拟主机(Virtual Host)功能实现的。以下是基于 NginxApache 两种主流方案的详细步骤。


✅ 前提条件

  • 已安装并运行 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.comsite1 路径):

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

类似结构,仅修改 ServerNameDocumentRoot 和日志路径。

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 场景的配置吗?欢迎告诉我你的具体需求 😊