nginx常用配置详解记录

-e $request_filename + nginx内置变量

-e表示只要filename存在,则为真,不管filename是什么类型,当然这里加了!就取反

额外的一些
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为

 

举例,例如thinkphp常用的:

location / {  #任何请求都会匹配
   if (!-e $request_filename) {  #当请求的文件不存在的时候

#进行重写比如:https://www.bossedm.com/Admin/main/main/sid/3a419dad80a25366a00a95c15e4378bb.html 通过正则匹配变成了https://www.bossedm.com/index.php?s=Admin/main/main/sid/3a419dad80a25366a00a95c15e4378bb.html
   rewrite  ^(.*)$  /index.php?s=$1  last;   
   break; 
    }
 }

 

nginx官方解释:

last:

    stops processing the current set of ngx_http_rewrite_module directives followed by a search for a new location matching     

    the changed URI;

break:

    stops processing the current set of ngx_http_rewrite_module directives;

 

break语句

使用环境:server,location,if;
该指令的作用是完成当前的规则集,不再处理rewrite指令。

如果是直接请求某个真实存在的文件,则用break语句停止rewrite检查:
if (-f $request_filename) {
break;
}

 

if指令

使用环境:server,location
该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。

(参考https://www.cnblogs.com/xuey/p/7631690.html)

 

return指令

  语法:return code ;
  使用环境:server,location,if;
  该指令用于结束规则的执行并返回状态码给客户端。
  示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码
  location ~ .*\.(sh|bash)?$
  {
    return 403;
  }

 

Set指令

  语法:setvariable value ; 默认值:none; 使用环境:server,location,if;
  该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。
  示例:set $varname "hello world";  #设置$varname = "hello world"

 

Uninitialized_variable_warn指令

  语法:uninitialized_variable_warnon|off
  使用环境:http,server,location,if
  该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。

 

rewite 

 语法:rewriteregex replacement flag
  使用环境:server,location,if
  该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句,示例如下:

https://www.bossedm.com/Admin/main/main/sid/dae07522a605e3475c13b65c77f65586.html做例子.
  if ( $host ~* www\.(.*) ) #$host内置变量应该是www.bossedm.com
  {
    set  $host_without_www $1; #这里的将$host_without_www  = "bossedm.com"
    rewrite  ^(.*)$   http://$host_without_www$1 permanent; #这里的重写         #$1="/Admin/main/main/sid/dae07522a605e3475c13b65c77f65586.html"
  }

 

 rewrite 最后一项flag参数:

标记符号说明
last本条规则匹配完成后继续向下匹配新的location URI规则
break本条规则匹配完成后终止,不在匹配任何规则
redirect返回302临时重定向
permanent返回301永久重定向

在server块下,会优先执行rewrite部分,然后才会去匹配location块,即使location写在rewriter前面,
server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空,

server中的模块只进行一次rewriter匹配对于break和last,即使进入到location之后在rewriter last之后,也不会再匹配server中的rewriter的规则(因为last直接就是找location,不是rewriter.)

如果是redirect和permanent那就不一样了,注意上面的last和break在浏览器上的url地址都是不变的,然而redirect和permanent浏览器地址都是会被重写的,所以相当于重新请求了一次nginx,所以要重来.

 

location中的rewirte:

不写last和break - 那么流程就是依次执行这些rewrite
1. rewrite break - url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变
2. rewrite last - url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变(并不会跳过原本的location,如果条件符合可能进入到原来的location,造成死循环- -!超过10次就500错误)
3. rewrite redirect – 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)
4. rewrite permanent – 返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url

location 举例

location = /demo {    
    rewrite ^ http://google.com;
}

上述的配置表示只有访问 http://192.168.33.10/demo 这样的url,才能跳转到google的页面。除此之外的任何地址都无法访问,那怕是访问http://192.168.33.10/demo/这个地址也不行。因为url匹配模式是/demo

 

location匹配规则及优先级

 

  1. = 严格匹配这个查询。如果找到,停止搜索。
  2. ^~ 匹配路径的前缀,如果找到,停止搜索。
  3. ~ 为区分大小写的正则匹配
  4. ~* 为不区分大小写匹配
  5. /  #任何请求都会匹配
    优先级: 首先精确匹配 =   >其次以xx开头匹配^~ >然后是按文件中顺序的正则匹配 >最后是交给 / 通用匹配。也就是=, ^~, ~或~*, /

nginx内置变量(可能要另外做个文章写)

 

 

 

nginx小技巧,打印变量:

        location / {
                default_type    text/plain;
                return 502 $document_uri;#这里打印了$document_uri这个变量
        }

打印变量参考:https://blog.csdn.net/q741983251/article/details/84255849

参考(https://www.cnblogs.com/xuey/p/7631690.html)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值