Nginx会按照配置文件中server块的顺序进行匹配。如果第一个server块匹配了请求,则Nginx会使用该server块处理请求,即使后续还有更具体的server_name匹配。确保你的server块按照从最不具体到最具体的顺序排列。 例如,你应该避免这样的配置顺序: nginx server { listen 80; server_name _; # 通配符,匹配所有请求 ... ...
}nginx将按照1,2,3,4的顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于location指令)。 server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能,这样可以尽量精简配置文件,毕竟太长的配置文件日常维护也很不方便。下面是2个具体的...
在开始学nginx的时候server_name明明没有匹配上,但竟然访问到了,还以为server_name不起作用,后来发现server_name的匹配规则是:先遍历所有配置的server_name,如果找到了,则执行对应的server,如果没有找到,则默认执行第一个server。 ——— 版权声明:本文为CSDN博主「星坠竹空」的原创文章,遵循CC 4.0 BY-SA版权协议...
使用正则表达式主机名,server name 必须以 “~” 字符为起始字符。 server_name ~^www\d+\.example\.net$; 1. 如果不以 “~” 字符为起始字符,该 server name 将被视为 “准确的主机名” 或者当 server name 包含 “*” 时被视为 “通配主机名” (多数情况是非法通配主机名,因为只有当 “*” 在 se...
如果是的话,原因为:server 的匹配规则是如果所有的server_name都匹配不上的话,会使用第一个server...
⑦如果所有Host头匹配失败,并且没有default_server,那么将会转向满足第一步的第一个server的listen指令。 2、server_name 格式 ①精确匹配 server_name www.xuegod.cn ②泛解析 server_name *.xuegod.cn; #替代部分子域名 server_name www.xuegod.*; #替代部分顶级域 ...
可见,在寻找server_name的过程中,发现没有匹配到任何一个server_name,然后就默认走第一个server块,其中有rewrite的配置,因此出现了强跳https的情况。 在开始处理一个http请求时,nginx会取出header头中的host,与配置文件中每个server的server_name进行匹配,以此决定到底由哪一个server块来处理这个请求。如果server_name...
nginx如果没匹配到,就会采用默认值。 也就是当你本机IP访问的时候,都没匹配到,那就会匹配默认值,也就是第一个server。 此时默认的server就是第一个。虽然你没有配置192.168.1.2的IP,但nginx会默认有一个空的server_name。所以你通过192.168.1.2也能访问的。 具体可以阅读下这篇文章:nginx是怎么处理一个请求的...
如果不加server_name会发生什么 server_name 指令用于指定一个或多个域名,Nginx 将根据客户端请求中的 Host 头来匹配相应的 server_name,从而确定应该用哪个 server block 来处理请求。 如果没有 server_name 指令,Nginx 将无法区分不同域名的请求,因此所有请求都将被默认server block处理。默认情况下,如果没有指定...
不显示指定的话,默认第一个 server_name 参考:https://www.oschina.net/question/12_3565算是一种对于不匹配的请求的处理方式,虽然我现在没有用,不过可以记录下来方便以后可能用到。 代码语言:javascript 复制 server{listen80default_server;server_name _;return404;} ...