标签:line mat 指令集 href proc 注意 字符串的比较 log 表达式
nginx是开发中常用的web server,又可以做反向代理,另外k8s中的ingress默认使用的也是nginx,所以有必要深入了解下nginx的相关知识,及一些必要的原理知识。
location [=|~|~*|^~|@] pattern { ... }
server {
server_name web.com;
location ~ ^/abcd$ {
[…]
}
}
^/abcd\(这个正则表达式表示字符串必须以/开始,以\)结束,中间必须是abcd
http://web.com/abcd匹配(完全匹配)
http://web.com/ABCD不匹配,大小写敏感
http://web.com/abcd?param1¶m2匹配
http://web.com/abcd/不匹配,不能匹配正则表达式
http://web.com/abcde不匹配,不能匹配正则表达式
当有多条 location 规则时,nginx 有一套比较复杂的规则,优先级如下:
break
Context: server, location, if
停止执行 ngx_http_rewrite_module 的指令集,但是其他模块指令是不受影响的
官方:
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;
last: 停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始执行…
break:相对last,break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段…
实例
server {
listen 80 default_server;
server_name dcshi.com;
root www;
location /break/ {
rewrite ^/break/(.*) /test/$1 break;
echo "break page";
}
location /last/ {
rewrite ^/last/(.*) /test/$1 last;
echo "last page";
}
location /test/ {
echo "test page";
}
}
Context: server, location
依据指定的条件决定是否执行 if 块语句中的内容
if 中的几种 判断条件
set $variable "0";
if ($variable) {
# 不会执行,因为 "0" 为 false
break;
}
# 使用变量与正则表达式匹配 没有问题
if ( $http_host ~ "^star\.igrow\.cn$" ) {
break;
}
# 字符串与正则表达式匹配 报错
if ( "star" ~ "^star\.igrow\.cn$" ) {
break;
}
# 检查文件类的 字符串与变量均可
if ( !-f "/data.log" ) {
break;
}
if ( !-f $filename ) {
break;
}
if中&&的实现,参考:
// 匹配click路径且参数中带有name=walkingsun 重定向到click-ios路径
set $flag 0;
if ( $uri = /click) {
set $flag 1;
}
if ( $args ~ name=walkingsun ) {
set $flag 1$flag;
}
if ( $flag = 11 ) {
rewrite ^/(.*) $uri-ios break;
}
Context: server, location, if
return code [text];
return code URL;
return URL;
停止处理并将指定的code码返回给客户端。 非标准code码 444 关闭连接而不发送响应报头
有一种特殊情况,就是重定向的url可以指定为此服务器本地的urI,这样的话,nginx会依据请求的协议$scheme, server_name_in_redirect 和 port_in_redirect自动生成完整的 url (此处要说明的是server_name_in_redirect 和port_in_redirect 指令是表示是否将server块中的 server_name 和 listen 的端口 作为redirect用 )
https://segmentfault.com/a/1190000008102599
标签:line mat 指令集 href proc 注意 字符串的比较 log 表达式
原文地址:https://www.cnblogs.com/followyou/p/12953417.html