nginx中server_name的作用
nginx中server_name的作用
先上例子
nginx部署在局域网中192.168.2.4的服务器上,修改nginx.conf配置文件,添加3个server,然后执行命令nginx -s reload重新加载nginx服务
- server {
- listen 80;
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- }
- }
- server {
- listen 80;
- server_name www.zkh.*;
- location / {
- root html;
- index index1.html;
- }
- }
- server {
- listen 80;
- server_name www.zkh.com;
- location / {
- root html;
- index index2.html;
- }
- }
在nginx的html目录下添加index1.html和index2.html页面
本地机器ip:192.168.5.158(不重要),修改C:\Windows\System32\drivers\etc目录下的hosts文件(linux的hosts文件在/etc目录下),在末尾添加DNS记录
- 192.168.2.4 www.zkh.com
- 192.168.2.4 www.zkh.org
结果
本地机器浏览器访问www.zkh.com返回index2.html,访问www.zkh.org返回index1.html,访问192.168.2.4返回index.html
分析
打开浏览器调试模式,可以看到当浏览器访问www.zkh.com时,Request Header的host属性值为www.zkh.com
在开始处理一个http请求时,nginx会取出header头中的host,与nginx.conf中每个server的server_name进行匹配,然后根据内定的匹配优先级排序,以此决定到底由哪一个server块来处理这个请求。当然选择一个server的前提是访问端口跟server中listen的端口对应。
匹配顺序
server_name与host匹配优先级如下(前提是浏览器访问端口与serverlisten端口一致):
1、完全匹配
2、通配符在前的,如*.test.com
3、在后的,如www.test.*
4、正则匹配,如~^\.www\.test\.com$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
如 listen 80 default;而且每个端口只能设置一个default否则报错
2、找到匹配listen端口的第一个server块
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升