• Nginx user_agent、if指令及全局变量


    Nginx user_agent、if指令及全局变量

    User_agent

    User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
    
    Nginx web 服务器支持if条件表达式使用$http_user_agent变量,由此来跳转或者使用不同的配置变量
    
    此处通过利用http_user_agent来识别用户不同的系统型号,浏览器等返回不同的站点文件,从而达到适应设备等功能
    
    例:
    
    if($http_user_agent ~* "MSIE" ) {
    
            root html/ie
    
    }
    

    if指令全局变量

    if判断指令

    语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:
    
    •当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
    
    •直接比较变量和内容时,使用=或!=
    
    •~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
    
    -f和!-f用来判断是否存在文件
    
    -d和!-d用来判断是否存在目录
    
    -e和!-e用来判断是否存在文件或目录
    
    -x和!-x用来判断文件是否可执行
    
    例:
    
    if ($http_user_agent ~ MSIE) {
    
    rewrite ^(.*)/msie/1 break;
    
    } //如果UA包含"MSIE",rewrite请求到/msid/目录下
    
    if (httpcookie ∗"id=([;]+)(?:;|)") {
    
    set id1;
    
    } //如果cookie匹配正则,设置变量$id等于正则引用部分
    
    if ($request_method = POST) {
    
    return 405;
    
    } //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
    
    if ($slow) {
    
    limit_rate 10k;
    
    } //限速,$slow可以通过 set 指令设置
    
    if (!-f $request_filename){
    
    break;
    
    proxy_pass http://127.0.0.1;
    
    } //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
    
     
    
    if ($args ~ post=140){
    
    rewrite ^ http://example.com/ permanent;
    
    } //如果query string中包含"post=140",永久重定向到example.com
    
    location ~* .(gif|jpg|png|swf|flv)$ {
    
    valid_referers none blocked www.jefflei.com www.leizhenfang.com;
    
    if ($invalid_referer) {
    
    return 404;
    
    } //防盗链
    
    }
    

    全局变量

    下面是可以用作if判断的全局变量

    args : #这个变量等于请求行中的参数,同query_string
    
    $content_length : 请求头中的Content-length字段。
    
    $content_type : 请求头中的Content-Type字段。
    
    $document_root : 当前请求在root指令中指定的值。
    
    $host : 请求主机头字段,否则为服务器名称。
    
    $http_user_agent : 客户端agent信息
    
    $http_cookie : 客户端cookie信息
    
    $limit_rate : 这个变量可以限制连接速率。
    
    $request_method : 客户端请求的动作,通常为GET或POST。
    
    $remote_addr : 客户端的IP地址。
    
    $remote_port : 客户端的端口。
    
    $remote_user : 已经经过Auth Basic Module验证的用户名。
    
    $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。请求的文件路径名(带网站的主目录/code/images/test.jpg)
    
    $scheme : 用户请求使用的协议(如http,https)。
    
    $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    
    $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
    
    $server_name : 用户请求的域名。
    
    $server_port : 请求到达服务器的端口号。
    
    $request_uri : 包含请求参数的原始URI,不包含主机名,如:"/foo/bar.php?arg=baz"。 当前请求的文件路径(不带网站的主目录/inages/test.jpg
    
    documenturi:与uri相同。
    
    
  • 相关阅读:
    全排列算法的全面解析
    排序算法系列:插入排序算法
    MySQL多表查询核心优化
    Python代码优化及技巧笔记(二)
    深入理解Lambda
    Unity游戏逻辑服务器实践
    Java设计模式——迭代器模式
    Java设计模式——原型模式
    insert 加的锁
    区间锁
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/12990671.html
Copyright © 2020-2023  润新知