美文网首页程序员微服务架构和实践Nginx高端成长之路
【充电】《Nginx核心知识100讲》正则、如何找server指

【充电】《Nginx核心知识100讲》正则、如何找server指

作者: 言十年 | 来源:发表于2019-01-05 14:04 被阅读2次

极客专栏《Nginx核心知识100讲》46小节、47小节的笔记

46 | Nginx中的正则表达式

当在nginx确定那个域名处理请求时,或者用location匹配哪个url的时候,往往我们使用正则表达式,正则表达式让匹配的功能更加强大。

正则表达式

image.png image.png

如何验证你的正则表达式呢?如果放在nginx配置中验证,你需要重启nginx。所以推荐pcretest工具(下载源代码安装)验证。

image.png

注意:在nginx使用中不用加转义符\,但是在pcretest要使用。

掌握好的正则表达式的使用。可以在配置location、server name 或者rewrite的时候如虎添翼。

留言问题

1.NGINX中的正则用的也是PCRE标准吗

 作者回复
是的,configure中可以用--with-pcre=选项指定pcre版本。

47 | 如何找到处理请求的server指令块

在nginx http模块处理请求之前,首先确保它的指令被正确的解析出来了。为了处理请求到底使用哪个指令的值。因为指令的配置可以出现在http下,server下,location下。首先必须确保这个请求时被哪个server块处理。

server name

server name 它可以保证在处理11阶段的http模块处理之前,先决定哪个server块指令被使用。

server name 后面可以跟三种域名

image.png

主域名概念。这个主域名有什么用呢?当我们跟多个域名的时候,前面就是主域名。有个控制主域名用法的配置server_name_in_redirect,默认值是off。可以出现在http,server,location。

image.png

redirect off时,主域名是不生效的。主域名怎样用呢?当我们用return这个指令,会做一个302重定向,这个指令后面没有明确的domain只有一个url(/redirect),这个时候会发生什么样的事情呢?

image.png

如果redirect off改成on。再返回的location用的就是主域名。这就是主域名的一个用法。

image.png

当server_name后面跟正则表达式的时候,这个正则表达式还可以为我们创建新的变量。还是用小括号()分组提取的方式。

image.png

2 取上面第二个()。也可以使用命名变量的方式domain。

server 匹配顺序

image.png

上图1,2,3条跟顺序无关,第4条跟文件顺序有关。第5条,如果访问了没有指定的子域名的时候,将会default server处理,保证后面11个阶段各个http模块找到它在server配置块下一个指令的值。default server 有两种指定方式。如果我们没有指定的时候,我们按照顺序来,所有的server大括号块,第一个就是default server。当我们指定了 default。这个listen所属的server块 就将变成default server。

留言问题

1.如果没有server_name指令,只有listen指令,是不是只检查端口就行了?不再检查host了

 作者回复
如果所有server{}都没有server_name,那么唯一的就是default server,host匹配不上其他 server_name时,就会选用它

2.如果没有Host头部呢?是不是使用url中的域名做匹配?

 作者回复
没有Host头部会报错。

3.server name是和请求中的Host头部做匹配吗?还是和url中的域名做匹配?

 作者回复
与Host头部匹配

4.最近在配置nginx反向代理时被location后匹配规则和转发机制给绕晕了,希望您给解答一下

location /test/ {
proxy_pass http://127.0.0.1
}

location /test/ {
proxy_pass http://127.0.0.1/
}

末尾带斜杠,对最后的代理地址会有直接的影响,这是为啥,没想明白

 作者回复
当末尾有斜杠时,认为带url了,此时location对请求URL采用替换关系,把location后的url1替换为proxy_pass中的url2。
第4部分课程中会详细介绍。

5.系统内核不应该是和master交互,有master进程调用worker进程处理请求么

 作者回复
不是哦,这样性能可以想见会非常差,环节太多!

6.什么场景一下会使用server_name_in_redirect? 如果server_name后面跟3个域名,设置为on时,结果是哪个呢?

 作者回复
后面在谈到处理/结尾的url时,会深入谈这个指令。大概在说static模块提供的root/alias指令时,你关注下这一课。

相关文章

网友评论

    本文标题:【充电】《Nginx核心知识100讲》正则、如何找server指

    本文链接:https://www.haomeiwen.com/subject/pikrrqtx.html