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

nginx创建一个虚拟主机vhost

Nginx中创建一个 虚拟主机(vhost),需在配置文件中定义一个 server块,指定监听端口、

使用 Nginx 创建虚拟主机(Vhost)

什么是虚拟主机(Vhost)

虚拟主机允许在同一台服务器上运行多个网站,每个网站拥有独立的配置和资源,通过区分请求的域名或端口,Nginx 可以将流量路由到对应的网站根目录。


创建虚拟主机的步骤

安装 Nginx

如果尚未安装 Nginx,可以通过以下命令安装:

# 对于 Debian/Ubuntu 系统 sudo apt update sudo apt install nginx # 对于 CentOS/RHEL 系统 sudo yum install epel-release sudo yum install nginx

配置虚拟主机

在 Nginx 中,虚拟主机的配置分为两种类型:

  • 基于域名的虚拟主机(更常见)
  • 基于端口的虚拟主机

示例 1:基于域名的虚拟主机

假设需要为 example.com 和 test.com 创建两个虚拟主机。

  1. 创建网站目录

  2. 创建测试页面

    echo "<h1>Welcome to example.com!</h1>" > /var/www/example.com/html/index.html echo "<h1>Welcome to test.com!</h1>" > /var/www/test.com/html/index.html
  3. 编辑 Nginx 配置文件

    打开 Nginx 的主配置文件:

    nginx创建一个虚拟主机vhost 第1张

    sudo nano /etc/nginx/nginx.conf

    确保包含以下行(通常已存在):

    http { include /etc/nginx/conf.d/.conf; ... }
  4. 创建虚拟主机配置文件

    在 /etc/nginx/conf.d/ 目录下创建 example.com.conf 和 test.com.conf:

    /etc/nginx/conf.d/example.com.conf

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

    /etc/nginx/conf.d/test.com.conf

    server { listen 80; server_name test.com www.test.com; root /var/www/test.com/html; index index.html; location / { try_files $uri $uri/ =404; } }
  5. 测试配置并重启 Nginx

    nginx创建一个虚拟主机vhost 第2张

    sudo nginx -t # 测试配置是否正确 sudo systemctl restart nginx # 重启 Nginx
  6. 示例 2:基于端口的虚拟主机

    如果需要在同一域名下通过不同端口访问不同网站:

    1. 创建网站目录和测试页面

      sudo mkdir -p /var/www/port8080/html sudo mkdir -p /var/www/port8081/html echo "<h1>Welcome to Port 8080!</h1>" > /var/www/port8080/html/index.html echo "<h1>Welcome to Port 8081!</h1>" > /var/www/port8081/html/index.html
    2. 创建虚拟主机配置文件

      /etc/nginx/conf.d/port8080.conf

      server { listen 8080; server_name localhost; root /var/www/port8080/html; index index.html; location / { try_files $uri $uri/ =404; } }

      /etc/nginx/conf.d/port8081.conf

      server { listen 8081; server_name localhost; root /var/www/port8081/html; index index.html; location / { try_files $uri $uri/ =404; } }
    3. 测试配置并重启 Nginx

      sudo nginx -t sudo systemctl restart nginx


    SSL 证书配置(可选)

    为虚拟主机启用 HTTPS:

    1. 安装 Certbot

      sudo apt install certbot python3-certbot-nginx # Debian/Ubuntu sudo yum install certbot python3-certbot-nginx # CentOS/RHEL
    2. 申请 SSL 证书

      sudo certbot --nginx -d example.com -d www.example.com

      按提示完成操作,Certbot 会自动修改 Nginx 配置。

    3. 自动续期

      Certbot 会创建定时任务自动续期证书。


    常见问题与解答

    问题 1:如何修改虚拟主机的根目录?

    解答:在虚拟主机配置文件中,修改 root 指令指向的路径。

    root /var/www/new_path/html;

    修改后测试配置并重启 Nginx:

    sudo nginx -t sudo systemctl restart nginx

    问题 2:如何强制重定向 HTTP 到 HTTPS?

    解答:在虚拟主机配置中添加重定向规则。

    server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; # 强制跳转到 HTTPS }

    保存后测试配置并重启 Nginx。

    nginx创建一个虚拟主机vhost 第3张

0