找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3868

积分

0

好友

508

主题
发表于 前天 23:53 | 查看: 17| 回复: 0

Nginx 是一款高性能的 Web 服务器,支持多种虚拟主机配置方式,能够根据域名、IP 或端口区分不同的站点。这种灵活性让 Nginx 成为搭建多站点服务的理想选择。

本文将一步步带你实现三种常见的虚拟主机配置方法:基于域名、基于 IP 和基于端口的虚拟主机。无论你是初学者还是有经验的运维人员,这篇教程都能帮助你快速掌握虚拟主机的配置技巧。

以下案例演示基于源码包安装的 Nginx(如果你用的是 RPM 包,只需把路径换成你自己的 Nginx 路径,其他步骤基本一致。新手朋友请先具备基础环境再动手)。你可以在 云栈社区 与更多开发者交流 Nginx 配置经验。

1. 基于域名的虚拟主机

步骤 1:准备网站根目录

为每个域名创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/site1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/site2

[root@localhost ~]# echo "Welcome to Site 1" > /usr/local/nginx/html/site1/index.html
[root@localhost ~]# echo "Welcome to Site 2" > /usr/local/nginx/html/site2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容。注意:如果需要两个虚拟主机,只需额外添加一个 server 块即可。

基于域名的虚拟主机配置截图,展示了 server 块中 listen 80、server_name、root 等关键指令

# 全局配置
user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

# 基于域名的虚拟主机配置
    server {
        listen       80;
        server_name  www.site1.com;

# 网站根目录
        root   html/site1;
        index  index.html index.htm;

# 日志配置
        access_log  logs/site1_access.log;
        error_log   logs/site1_error.log;

# 主路径配置
        location / {
            try_files $uri $uri/ =404;
        }

# 状态监控
        location /status {
            stub_status on;
            access_log off;
            allow 192.168.14.112;
            deny all;
        }

# 错误页面配置
        error_page   404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /404.html {
            root   html/site1;
        }
        location = /50x.html {
            root   html;
        }

# 禁止访问 .ht 文件
        location ~ /\.ht {
            deny all;
        }
    }

    server {
        listen       80;
        server_name  www.site2.com;

# 网站根目录
        root   html/site2;
        index  index.html index.htm;

# 日志配置
        access_log  logs/site2_access.log;
        error_log   logs/site2_error.log;

# 主路径配置
        location / {
            try_files $uri $uri/ =404;
        }

# 错误页面配置
        error_page   404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /404.html {
            root   html/site2;
        }
        location = /50x.html {
            root   html;
        }

# 禁止访问 .ht 文件
        location ~ /\.ht {
            deny all;
        }
    }
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://www.site1.com,应显示 Welcome to Site 1
  • http://www.site2.com,应显示 Welcome to Site 2

客户端测试

修改 hosts 文件(本地 DNS 解析):

[root@localhost ~]# vim /etc/hosts

/etc/hosts 文件内容截图,显示了为 www.site1.com 和 www.site2.com 添加的 IP 映射记录

终端执行 curl 命令分别访问 www.site1.com 和 www.site2.com,返回各自站点欢迎语的测试结果

2. 基于 IP 的虚拟主机

步骤 1:准备网站根目录

为每个 IP 创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/ip1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/ip2

[root@localhost ~]# echo "Welcome to IP 192.168.14.111" > /usr/local/nginx/html/ip1/index.html
[root@localhost ~]# echo "Welcome to IP 192.168.14.112" > /usr/local/nginx/html/ip2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容:

基于 IP 的虚拟主机配置截图,突出显示了 listen 指令中指定的 IP 地址和对应的 root 路径

server {
    listen 192.168.14.111:80;
    server_name 192.168.14.111;
    root html/ip1;  # 使用默认路径的子目录
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

# 错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;  # 默认错误页面路径
    }
}

server {
    listen 192.168.14.112:80;
    server_name 192.168.14.112;
    root html/ip2;  # 使用默认路径的子目录
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

# 错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;  # 默认错误页面路径
    }
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://192.168.14.111,应显示 Welcome to IP 192.168.14.111
  • http://192.168.14.112,应显示 Welcome to IP 192.168.14.112

客户端测试

因为我在虚拟机中测试,只有一个网卡,所以需要虚拟一个额外网卡。你可以忽略这步操作,直接看测试结果即可。

ip addr add 192.168.14.110/24 dev ens33

终端执行 curl 命令访问不同 IP 地址,返回相应 IP 专属欢迎语的测试结果

3. 基于端口的虚拟主机

步骤 1:准备网站根目录

为每个端口创建独立的子目录,并添加测试页面:

[root@localhost ~]# mkdir -p /usr/local/nginx/html/port1
[root@localhost ~]# mkdir -p /usr/local/nginx/html/port2

[root@localhost ~]# echo "Welcome to Port 8080" > /usr/local/nginx/html/port1/index.html
[root@localhost ~]# echo "Welcome to Port 9090" > /usr/local/nginx/html/port2/index.html

步骤 2:修改 Nginx 配置文件

打开 Nginx 的配置文件:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http 配置段中添加以下内容:

基于端口的虚拟主机配置截图,指示只需修改监听端口和对应的 root 目录即可

server {
    listen 8080;
    server_name localhost;
    root html/port1;  # 使用默认路径的子目录
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

# 错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;  # 默认错误页面路径
    }
}

server {
    listen 9090;
    server_name localhost;
    root html/port2;  # 使用默认路径的子目录
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

# 错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;  # 默认错误页面路径
    }
}

步骤 3:测试配置并重启 Nginx

测试配置文件语法:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t

重启 Nginx 服务:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

步骤 4:访问测试

在浏览器中访问:

  • http://192.168.14.111:8080,应显示 Welcome to Port 8080
  • http://192.168.14.111:9090,应显示 Welcome to Port 9090

客户端测试

终端执行 curl 访问不同端口的测试截图,显示成功返回对应的端口欢迎语

4. 总结

通过本文的详细步骤,我们成功实现了基于域名、IP 和端口的虚拟主机配置。Nginx 的灵活性和高性能使其能够轻松应对多站点服务的需求。

这些配置方法不仅适用于日常开发和测试环境,同样能为生产环境提供稳定可靠的服务。如果你在 Nginx 配置过程中还有其他疑问或需求,欢迎多动手实践,让我们共同进步。

来源:https://blog.csdn.net/jxjdhdnd




上一篇:JDK 12 到 17 语法新特性实战:switch 表达式、record、sealed 等详解
下一篇:3GPP新加坡全会锁定6G标准化时间表:Rel-21正式获批,2029年ASN.1/OpenAPI冻结
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-6-21 12:10 , Processed in 0.593473 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表