nginx 多个 server_name 如何匹配?

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;
1
不显示指定的话,默认第一个 server_name

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

server {
listen 80 default_server;
server_name _;
return 404;
}
————————————————
版权声明:本文为CSDN博主「光滑的秃头」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ycf921244819/java/article/details/104452281

猜你喜欢

转载自www.cnblogs.com/fengff/p/12597770.html