Nginx学习日志(五)多个server_name匹配以及default_server的问题

nginx 多个 server_name 如何匹配?

简单看这个问题,会觉得这个问题很蠢,怎么匹配?不就是根据 server_name 名字匹配的么?

是的,我最开始也是这么觉得的,并且在之前的笔记:Nginx学习日志(二)通过反向代理将不同域名映射到不同的端口 当中的记录也是根据名字匹配。

但是当我新解析一个域名:blog.hjljy.cn 到服务器上面的时候, nginx server_name 里面还没有来得及配置这个域名只配置了:www.hjljy.cn 这个域名,这时在浏览器输入 blog.hjljy.cn 这个域名,按照上面的想法应该是找不到服务器的。而事实的结果是尽管访问的是 blog.hjljy.cn 但是最终跳转到了 www.hjljy.cn 。

然后在 nginx 配置了多个 server_name ,访问对应的域名都可以跳转到对应的域名服务上去,情况符合之前写的笔记:Nginx学习日志(二)通过反向代理将不同域名映射到不同的端口

但是当我又新解析一个域名:api.hjljy.cn 到服务器上面的时候, 发现访问这个 api.hjljy.cn,还是会跳转到 www.hjljy.cn 上面去。

最终经过多次尝试和查阅资料得到以下的结论:

1 确实是通过 server_name 进行匹配然后转发请求的
2 如果没有匹配的 server_name,会默认跳转到 default_server 去 然后由 default_server 处理这个请求。
3 如果有匹配的 server_name 但是在这个 server 里面没有这个请求的处理方式的话,也会默认跳转到 default_server 去。
例如: blog.hjljy.cn 只配置了下面的请求处理方式。 当我的请求为: blog.hjljy.cn/501.html 并且对应的请求能够正常转发就可以正常进入 但是如果是 blog.hjljy.cn/401.html 就会跳转到 www.hjljy.cn/401.html

location = /50x.html {
root /usr/local/nginx/html/myerror;
}

default_server 的问题

显示指定

listen 80  default_server;

不显示指定的话,默认第一个 server_name

参考:https://www.oschina.net/question/12_3565 算是一种对于不匹配的请求的处理方式,虽然我现在没有用,不过可以记录下来方便以后可能用到。

server {
    listen       80  default_server;
    server_name  _;
    return       404;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值