Nginx: 配置项之server_name指令用法梳理

概述

  • 基于域名的虚拟主机,它是通过什么来进行区分不同的虚拟主机呢?
    • 可以有多个server模块通过指定不同的server_name来区分不同的那个虚拟主机
    • 可以理解成不同的一个网站域名

server_name 指令用法


1 )语法结构

  • 语法: server_name name1 name2 name3 ...;
    • 这是一个固定写法,后面可以跟多个域名
  • 示例1:server_name www.nginx.com;
  • 示例2:server_name *.nginx.org;
  • 示例3:server_name www.nginx.org *.nginx.org;

2 ) 四种写法

  • server_name www.imooc.com
  • server_name *.imooc.com 前通配
  • server_name www.imooc.* 后通配
  • server_name ~^www\.imooc\.*$ ~ 表示正则匹配

3 )实际演示

nginx.conf

http {
	server {
		listen           80;
		server_name      www.nginx-test.com *.nginx-test.com www.nginx-test.*;
		root             html/nginx-test;
		location / {
			index  index.html;
		}
	}
}
  • $ mkdir nginx-test
  • $ touch nginx-test/index.html
    <h1> test nginx</h1>
    
  • $ /opt/nginx/sbin/nginx -s reload
  • 配置 本机 hosts
    192.168.1.23    www.nginx-test.com
    192.168.1.23    news.nginx-test.com
    192.168.1.23    www.nginx-test.xy
    
  • 浏览器访问
    • http://www.nginx-test.com ✅ pass
    • http://news.nginx-test.com ✅ pass
    • http://www.nginx-test.xy ✅ pass

server_name 指令用法优先级


1 )多域名的匹配

多个域名通常定义不同的 server 块来区分

server {
	server_name  www.nginx.org
}

server {
	server_name  www.nginx.*
}

server {
	server_name  *.nginx.org
}

server {
	server_name  ~^www\.nginx\.*$
}
  • 写了4个 server 块,或某个服务器上部署了多个虚拟主机,应该以哪个为准?

2 )匹配的优先级

  • 精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配

3 )测试

http {
	server {
		listen           80;
		server_name      *.nginx-test.com;
		root             html/nginx-test/left-match;
		location / {
			index  index.html;
		}
	}
	server {
		listen           80;
		server_name      ~^.*\.nginx-test\..*$;
		root             html/nginx-test/reg-match;
		location / {
			index  index.html;
		}
	}
	server {
		listen           80;
		server_name      www.nginx-test.*;
		root             html/nginx-test/right-match;
		location / {
			index  index.html;
		}
	}
	server {
		listen           80;
		server_name      www.nginx-test.com;
		root             html/nginx-test/all-match;
		location / {
			index  index.html;
		}
	}
}
  • $ mkdir { all-match, left-match, right-match, reg-match }

  • $ touch left-match/index.html

    <h1>left-match</h1>
    
  • $ touch reg-match/index.html

    <h1>reg-match</h1>
    
  • $ touch right-match/index.html

    <h1>right-match</h1>
    
  • $ touch all-match/index.html

    <h1>all-match</h1>
    
  • 现在,我们修改下我们的 hosts

    192.168.1.23    www.nginx-test.com
    192.168.1.23    mail.nginx-test.com
    192.168.1.23    doc.nginx-test.xy
    192.168.1.23    www.nginx-test.org
    192.168.1.23    www.nginx-test.cn
    192.168.1.23    sport.nginx-test.cc
    

浏览器访问测试

1 )访问 http://www.nginx-test.com

  • 会显示 all-match
  • 如果注释掉 all-match 相关 server 块,重新加载 nginx, 则显示 left-match

2 ) 访问 http://mail.nginx-test.com 或 http://doc.nginx-test.com

  • 会显示 left-match

3 ) 访问 http://www.nginx-test.org 或 http://www.nginx-test.cn

  • 会显示 right-match

4 ) 访问 http://sport.nginx-test.cc

  • 会显示 reg-match
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值