为了账号安全,请及时绑定邮箱和手机立即绑定

《Nginx核心知识100讲》正则、如何找server指令块

标签:
Java

46 | Nginx中的正则表达式

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

正则表达式

webp

image.png

webp

image.png

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

webp

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 后面可以跟三种域名

webp

image.png

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

webp

image.png

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

webp

image.png

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

webp

image.png

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

webp

image.png

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

server 匹配顺序

webp

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部分课程中会详细介绍。



作者:言十年
链接:https://www.jianshu.com/p/618574d61564


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消