当前位置:首页 > 虚拟主机 > 正文

Ubuntu如何添加新虚拟主机?linux服务器配置虚拟主机教程

在 Ubuntu 系统中添加新的虚拟主机(Virtual Host)通常涉及 Web 服务器软件(如 Nginx 或 Apache)的配置,以下将以目前广泛使用的 Nginx 为例,详细说明从零开始配置一个虚拟主机的完整流程,如果你使用的是 Apache,核心逻辑类似,但配置文件语法略有不同。

准备工作:目录结构与权限

在配置虚拟主机之前,首先需要为网站创建必要的目录结构,并设置正确的权限,以确保 Web 服务器能够读取文件。

假设我们要为域名 example.com 添加虚拟主机:

  1. 创建目录

    使用 mkdir 命令创建网站根目录,通常我们将网站文件存放在 /var/www/ 下。

    sudo mkdir -p /var/www/example.com/public_html
  2. 创建测试文件

    为了方便验证配置是否生效,可以在该目录下创建一个简单的 index.html 文件。

    echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
  3. 设置权限

    确保 Nginx 用户(通常是 www-data)拥有对目录的读取权限。

    sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com

创建虚拟主机配置文件

Nginx 的虚拟主机配置文件通常位于 /etc/nginx/sites-available/ 目录下,我们需要创建一个新文件来定义该域名的行为。

  1. 创建配置文件

    使用文本编辑器(如 nano 或 vim)创建配置文件。

    sudo nano /etc/nginx/sites-available/example.com
  2. 编写配置内容

    Ubuntu如何添加新虚拟主机?linux服务器配置虚拟主机教程 第1张

    在文件中输入以下基础配置,这段代码告诉 Nginx 监听 80 端口,并将 example.com 的请求指向我们刚才创建的目录。

    配置指令 说明
    server { 开始定义一个服务器块
    listen 80; 监听标准的 HTTP 端口 80
    listen [::]:80; 监听 IPv6 的 HTTP 端口 80
    server_name example.com www.example.com; 指定该虚拟主机处理的域名
    root /var/www/example.com/public_html; 指定网站的根目录路径
    index index.html; 默认首页文件名
    location / { 定义根路径下的行为
    try_files $uri $uri/ =404; 优先查找文件,若不存在则返回 404
    结束 location 块
    结束 server 块

    完整配置示例:

    server { listen 80; listen [::]:80; root /var/www/example.com/public_html; index index.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } }

  3. 保存并退出

    如果使用 nano,按 Ctrl + O 保存,Enter 确认,Ctrl + X 退出。

启用虚拟主机并测试配置

创建配置文件后,Nginx 并不会自动加载它,我们需要通过符号链接将其“启用”,并测试配置语法是否正确。

Ubuntu如何添加新虚拟主机?linux服务器配置虚拟主机教程 第2张

  1. 创建符号链接

    将 sites-available 中的配置文件链接到 sites-enabled 目录。

    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  2. 测试配置语法

    在重启服务之前,务必检查配置是否有语法错误。

    sudo nginx -t

    如果输出包含 syntax is ok 和 test is successful,则说明配置无误。

  3. 重载 Nginx

    应用更改。

    sudo systemctl reload nginx

本地测试与 DNS 设置

由于你可能没有真实的 DNS 记录指向该服务器,可以通过修改本地 hosts 文件来测试。

  1. 修改本地 Hosts 文件

    在你的电脑(而非服务器)上,编辑 C:WindowsSystem32driversetchosts (Windows) 或 /etc/hosts (Mac/Linux)。

    添加一行:

    Ubuntu如何添加新虚拟主机?linux服务器配置虚拟主机教程 第3张

    <服务器IP地址> example.com
  2. 浏览器访问

    打开浏览器访问 http://example.com,你应该能看到之前创建的 “Welcome to example.com” 页面。


相关问题与解答

问题 1:如果在配置虚拟主机时遇到 “403 Forbidden” 错误,可能的原因有哪些?

解答:

“403 Forbidden” 通常意味着 Nginx 有权访问服务器,但无权读取网站文件,常见原因包括:

  1. 权限问题:网站根目录或父目录没有对 www-data 用户设置读取和执行权限,解决方法是使用 sudo chown -R www-data:www-data /var/www/your_domain 和 sudo chmod -R 755 /var/www/your_domain。
  2. SELinux 或 AppArmor:某些安全模块可能阻止了 Web 服务器访问特定目录,检查安全日志(如 /var/log/audit/audit.log)以确认是否被拦截。
  3. 缺少索引文件:如果目录中没有 index.html 或 index.php,且配置中未开启目录列表(autoindex),Nginx 可能会返回 403,确保目录中有默认首页文件,或在 location 块中添加 autoindex on;(仅用于调试,生产环境不建议)。

问题 2:如何为这个新的虚拟主机配置 HTTPS(SSL 证书)?

解答:

配置 HTTPS 推荐使用 Let’s Encrypt 提供的免费证书,通过 Certbot 工具自动化管理,步骤如下:

  1. 安装 Certbot: sudo apt update sudo apt install certbot python3-certbot-nginx
  2. 获取证书

    运行以下命令,Certbot 会自动修改 Nginx 配置以启用 HTTPS 并重定向 HTTP 到 HTTPS。 sudo certbot --nginx -d example.com -d www.example.com

  3. 验证配置

    命令执行后,Certbot 会询问是否重定向所有 HTTP 流量到 HTTPS,建议选择 “Redirect”,之后,Nginx 会自动重载配置,你可以使用 curl -I https://example.com 检查是否返回 HTTP/2 200 以及证书信息。

0