Nginx 虚拟主机配置

什么是虚拟主机

虚拟主机是指,把一台物理主机划分为多台虚拟主机,每台虚拟主机都可以是一个独立的网站,可以有独立的域名,具有完整的服务器功能。

Nginx提供虚拟主机功能,使我们不必为每个网站都提供一台Nginx服务器;只需运行一组Nginx进程,就可以运行多个域名不同网站

配置虚拟主机的方法

有三种方法:

  • 基于域名的虚拟主机(不同的域名,相同的IP,这种方式用的最多)
  • 基于端口的虚拟主机(通过不同的端口号区分虚拟主机)
  • 基于IP的虚拟主机 (不同域名, 不同的IP, 需要多个网络接口, 这种用的比较少,不演示)

基于域名配置虚拟主机

例: 在一台Linux服务器中配置两台Nginx虚拟主机,实现如下要求:

修改客户机的HOSTS文件,添加服务器IP和域名的映射

修改/etc/hosts文件,添加如下两行: (192.168.52.200是我的Linux服务器IP)

复制代码
192.168.52.200 vod.petertest.com
192.168.52.200 aud.petertest.com

为两个虚拟主机准备静态页面

复制代码
mkdir -p /www/vod /www/aud
echo "welcome to vod site" > /www/vod/index.html
echo "welcome to aud site" > /www/aud/index.html

修改Nginx.conf的server配置块

复制代码
    # 虚拟主机1(vod.petertest.com)
    server {
        listen       80;
        server_name  vod.petertest.com; # 设置域名
		access_log   vod_petertest_access.log; # 设置日志路径
        include /etc/nginx/default.d/*.conf;
		
		location / {
		    root /www/vod;
	    }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    # 虚拟主机2(aud.petertest.com)
    server {
        listen       80;
        server_name  aud.petertest.com; # 设置域名
		access_log   aud_petertest_access.log; # 设置日志路径
        root         /www/aud; # 访问/www/vod下的页面
        include /etc/nginx/default.d/*.conf;
		location / {
		    root /www/aud;
		}

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

测试

使用nginx -t检查配置文件是否正确,使用nginx -s reload重新加载配置,测试结果如下:

复制代码
# curl vod.petertest.com
welcome to vod site
# curl aud.petertest.com
welcome to aud site

注: 如遇到Nginx报错: bind() to 0.0.0.0:8088 failed (13: Permission denied), 参考 link

基于端口配置虚拟主机

例: 在一台Linux服务器中配置两台Nginx虚拟主机,实现如下要求:

修改Nginx.conf的server配置块

配置方法和"基于域名配置虚拟主机"类似,只需修改server_name和listen的端口号

复制代码
    # 虚拟主机1(vod.petertest.com)
    server {
        listen       80;
        server_name  vod.petertest.com; # 设置域名
		access_log   vod_petertest_access.log;
        include /etc/nginx/default.d/*.conf;
		
		location / {
		    root /www/vod;
	    }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    # 虚拟主机2(aud.petertest.com)
    server {
        listen       88; # 修改下端口
        server_name  vod.petertest.com; # 设置域名
		access_log   aud_petertest_access.log;
        root         /www/aud;
        include /etc/nginx/default.d/*.conf;
		location / {
		    root /www/aud;
		}

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

测试

使用nginx -t检查配置文件是否正确,使用nginx -s reload重新加载配置,测试结果如下:

复制代码
# curl vod.petertest.com
welcome to vod site
# curl vod.petertest.com:88
welcome to aud site

Nginx server_name的其他配置案例

同一个server_name匹配多个域名

通过不同的域名访问相同的页面, 实现如下效果:

方法:修改nginx.conf的server配置块, 一个server_name中配置多个域名,如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com vod1.petertest.com;	# 在一个server中配置多个servername
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is vod web site
# curl vod1.petertest.com
this is vod web site

通配符匹配多个server_name

例如,访问.petertest.com结尾的域名,返回/www/vod页面

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  *.petertest.com;	# 通配符匹配
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

通配符结束匹配

实现如下效果:

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com;
        root         /www/www;
        include /etc/nginx/default.d/*.conf;
		# ...
    }
    server {
        listen       80;
        server_name  vod.petertest.*;			# 通配符结束匹配
        root         /www/aud;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is www web site
# curl vod.petertest.io
this is aud web site

正则匹配

实现如下效果:

Nginx.conf配置如下:

复制代码
    server {
        listen       80;
        server_name  vod.petertest.com;
        root         /www/www;
        include /etc/nginx/default.d/*.conf;
		# ...
    }
    server {
        listen       80;
        server_name  ~^[0-9]+\.petertest\.com$;			# 正则匹配
        root         /www/vod;
        include /etc/nginx/default.d/*.conf;
		# ...
    }

测试结果:

复制代码
# curl vod.petertest.com
this is www web site
# curl 123.petertest.com
this is aud web site

参考

手把手教你配置Nginx的虚拟主机

相关推荐
xujiangyan_7 小时前
nginx的反向代理和负载均衡
服务器·网络·nginx
viqecel21 小时前
网站改版html页面 NGINX 借用伪静态和PHP脚本 实现301重定向跳转
nginx·php·nginx重定向·301重定向·html页面重定向
硪就是硪1 天前
内网环境将nginx的http改完https访问
nginx·http·https
ak啊1 天前
Nginx 安全加固详细配置指南
nginx
沐土Arvin1 天前
Nginx 核心配置详解与性能优化最佳实践
运维·开发语言·前端·nginx·性能优化
haoranyyy2 天前
mac环境中Nginx安装使用 反向代理
linux·服务器·nginx
ak啊2 天前
Nginx 高级缓存配置与优化
nginx
再学一丢丢2 天前
Keepalived+LVS+nginx高可用架构
nginx·架构·lvs
xujiangyan_2 天前
nginx的自动跳转https
服务器·nginx·https
tingting01193 天前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes