nginx 配置_nginx 逻辑运算if()学习笔记

更新时间:2019-01-06    来源:nginx    手机版     字体:

【www.bbyears.com--nginx】

nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,而且不支持if的嵌套语法,否则会报下面的错误:nginx: [emerg] invalid condition。

我们可以用变量的方式来间接实现。

要实现的语句:

 代码如下

if ($arg_unitid = 42012 && $uri ~/thumb/){
 echo "www.111cn.net";
}

如果按照这样来配置,就会报nginx: [emerg] invalid condition错误。

可以这么来实现,如下所示:

 代码如下

set $flag 0;
if ($uri ~ ^/thumb/[0-9]+_160.jpg$){
 set $flag "${flag}1";
}
if ($arg_unitid = 42012){
 set $flag "${flag}1";
}
if ($flag = "011"){
 echo "www.111cn.net";
}


例,nginx实现多重if判断

 代码如下


# 要实现的语句
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {
return 403;
}
# 这是等效的,并真实可用的配置
set $flag 0;
if ($remote_addr ~ "^(12.34|56.78)") {
set $flag "${flag}1";
}
if ($http_user_agent ~* "spider") {
set $flag "${flag}2";
}
if ($flag = "012") {
return 403;
}

举例

 代码如下

if ($http_user_agent ~ MSIE) {
  rewrite  ^(.*)$  /msie/$1  break;
}
//如果UA包含”MSIE”,rewrite 请求到/msie目录下

if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
  set  $id  $1;
}
//如果cookie匹配正则,设置变量$id等于正则引用部分

if ($request_method = POST ) {
  return 405;
}
//如果提交方法为POST,则返回状态405 (Method not allowed)

if (!-f $request_filename) {
  break;
  proxy_pass  http://127.0.0.1;
}
//如果请求文件名不存在,则反向代理localhost

if ($args ~ post=140){
  rewrite ^ http://example.com/ permanent;
}
//如果query string中包含”post=140″,永久重定向到example.com

本文来源:http://www.bbyears.com/caozuoxitong/47083.html