前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变量和if判断

变量和if判断

作者头像
剧终
发布2021-01-12 14:35:13
8550
发布2021-01-12 14:35:13
举报
文章被收录于专栏:Linux学习日志Linux学习日志

变量

内置变量
代码语言:javascript
复制
$request_time    表示从接受用户请求的第一个字节到发送完整响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。
$upstream_response_time        表示从nginx向后端(upstream定义的主机列表)建立连接开始到接受完数据,然后关闭连接为止的时间。
$http_referer    客户请求的完整'URI'
$http_host        客户端请求的IP+端口
$scheme        使用的协议,'http'或者'https'
$host        请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称(处理请求的server的server_name指令的值),值为小写,不包含端口。
$arg_PARAMETER    这个变量值为GET请求中变量名'PARAMETER'参数的值
$gzip_ratio        如果开启了gzip压缩,此变量可以记录下压缩率。
$args        这个变量等于GET请求中的参数
$binary_remote_addr        二进制码形式的客户端地址。
$body_bytes_sent    传送页面的字节数
$content_length        请求头中的Content-length字段。
$content_type        请求头中的Content-Type字段。
$cookie_COOKIE        COOKIE的值
$document_root        当前请求在root指令中指定的值。
$document_uri        与'$uri'相同
$hostname    机器名使用 gethostname系统调用的值
$http_HEADER    HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值), $http_referer...;
$sent_http_HEADER    HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线),例如: $sent_http_cache_control, $sent_http_content_type...;
$is_args:如果$args设置,值为"?",否则为""
$limit_rate:这个变量可以限制连接速率
$nginx_version    当前运行的nginx版本号
$query_string    与$args相同
$remote_addr    客户端的IP地址
$remote_port    客户端的端口
$remote_user    已经经过Auth Basic Module验证的用户名
$request_filename    当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body    这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义
$request_body_file    客户端请求主体信息的临时文件名
$request_completion    如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空
$request_method        这个变量是客户端请求的动作,通常为GET或POST
包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作
$request_uri    这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI
$server_addr    服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数
$server_name    服务器名称
$server_port    请求到达服务器的端口号
$server_protocol    请求使用的协议,通常是'HTTP/1.0'或'HTTP/1.1'
$uri    请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html
定义变量 set
代码语言:javascript
复制
--示例,通过定义变量'$my_addr'来动态指定'upstream'
location / {
  set $my_add "172.16.0.14";
  proxy_pass http://$my_add/;
 }
变量映射 map
代码语言:javascript
复制
map指令是由'ngx_http_map_module'模块提供的,默认安装该模块

--实例
--编辑配置文件
[root@linux /]# vim /usr/local/nginx/conf.d/ww.conf
map $http_user_agent $user_agent {
    default "PC端";
    ~*curl "CURL命令";
    ~*iphone "IOS端";
    ~*android "Android端";
}
server {
  listen 80;
location /echo {
  echo "hello 您使用的是:$user_agent";
 }
}

--重载nginx
/usr/local/nginx/sbin/nginx -s reload

-验证
[root@linux /]# curl 172.16.0.1/echo
hello 您使用的是:CURL命令

条件判断 if

代码语言:javascript
复制
--语法
if(condition){…}

用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句
if指令不支持嵌套,不支持多个条件&&和||处理
代码语言:javascript
复制
--条件(condition)判断标识
'~'    为区分大小写匹配
'~*'    为不区分大小写匹配
'!~'    区分大小写不匹配
'!~*'    不区分大小写不匹配

--运算符
'-f'和'!-f'    判断是否存在文件
'-d'和'!-d'    判断是否存在目录
'-e'和'!-e'    判断是否存在文件或目录
'-x'和'!-x'    判断文件是否可执行
实例
代码语言:javascript
复制
--禁止使用'chrome'访问
if ($http_user_agent ~* chrome){
   return 502;
}

--禁止访问'admin'目录
if ($request_uri ~* /admin/(.*)){
   return 502;
}

--如果请求的文件名不存在,则反向代理到'http://172.16.0.14',这里的break是停止rewrite检查
location / {
if (!-f $request_filename){
break;
proxy_pass http://172.16.0.14;
 }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变量
    • 内置变量
      • 定义变量 set
        • 变量映射 map
        • 条件判断 if
          • 实例
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档