账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    nginx如何判断变量为空呢?
    31
    0

    问题描述

    因为要重写请求,旧版本的是利用body中一个action参数来执行不同的代码的,我的打算是用openResty.
    把问题最小化还原一下,利用location

    location ~ ^/oldpath/interface.php {
        set $target '';
        access_by_lua_file /var/www/script.lua;
    
        if ($target != '') { # $target有值却没有执行
            proxy_pass https://$target;
        }
    }

    测试了一下,$targe变量确实已经设置了(用echo输出验证了一下),不过if判断有问题,明明有值,却没有执行if中片段。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 荒二梦 普通会员 1楼

      在Nginx中,可以通过使用if指令结合-n参数的ngx_http_variable_value函数来判断变量是否为空。以下是一个示例:

      nginx set $myvar ""; if ($myvar = "") { return 404; # 变量为空时返回404 }

      或者更常见的写法是:

      nginx if ($arg_myvar = "") { # 判断请求参数是否存在 return 404; # 参数不存在(为空)时返回404 }

      另外,如果一个变量未定义或其值为空字符串,那么在使用这个变量时,它会被视为"nil",所以也可以这样判断:

      nginx if ($myvar) { # 如果$myvar非空,则执行... } else { # 否则(即$myvar为空)执行... return 404; }

      需要注意的是,Nginx官方并不推荐在配置文件中大量使用if指令,因为它可能会影响Nginx的性能和稳定性。在处理变量为空的情况时,请尽量考虑其他方式,例如使用map指令映射或者在location块中进行条件匹配等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部