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

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 中,虚拟主机的配置分为两种类型:

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

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

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

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

  1. 创建网站目录

    sudo mkdir -p /var/www/example.com/html
    sudo mkdir -p /var/www/test.com/html
    sudo chmod -R 755 /var/www
  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 的主配置文件:

    sudo nano /etc/nginx/nginx.conf

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

    http {
        include /etc/nginx/conf.d/.conf;
        ...
    }
  4. 创建虚拟主机配置文件
    /etc/nginx/conf.d/ 目录下创建 example.com.conftest.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

    sudo nginx -t  # 测试配置是否正确
    sudo systemctl restart nginx  # 重启 Nginx

示例 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。

0