Nginx多重if判断的实现

首先

Nginx不支持 and、or、&&、|| 这类语法;且不支持if的多重嵌套,例如:

if (aaa) {
    if (bbb) {
       exec @ccc;
   }
}

多重判断如何实现呢?

最近要做个配置,将移动设备访问网页时跳转到手机版面。需要判断2个部分才做跳转:一、客户端来源为移动设备;二、访问指定域名业务时。

实现方法一

每个域名配置单独的server{},这样配置比较简明;但缺点是配置文件会写很长,要修改多次。(比较啰嗦)

实现方法二

全部域名配置一个server{},进行多重判断;这样配置可能稍微复杂一点,但配置文件不会那么啰嗦。

server {
    listen 80;
    server_name _;
    set $domain $host;
    root /webapp/$domain;

    ...其它略

    if ($http_user_agent ~* "UCBrowser|Android|Iphone|Ipad|Ipod|BlackBerry|Windows Phone|Symbian(.*)Series60/3|Symbian(.*)Series60/5") {
        set $mobile ‘1‘;
    }

    if ($host !~* ^(app1|app2|app3)\.google\.com) {
        set $mobile ‘0‘;
    }

    if ($mobile = 1) {
        rewrite "^/index.html$" /mobile/index.html last;
    }

    ...其它略

}

后续

移动设备的 http_user_agent 还不全,慢慢收集~

时间: 2024-10-11 20:30:07

Nginx多重if判断的实现的相关文章

Nginx实现多重IF判断的办法

在YII框架中如果访问的图片不存在,会记录大量的错误,于是我想了个办法,凡是访问不存在的图片,直接返回404,不经过YII框架 location / {  set $if_img N;  if ($request_filename ~ (.*)\.(png|gif|jpg)){    set $if_img Y;  }  if (!-e $request_filename) {    set $if_img "${if_img}Y";  }  if ($if_img = YY) { r

Nginx if 条件判断

Nginx if 条件判断: 1.公司网站上线有这样的需求: 由于公司网站域名从http到https的转移,在测试阶段需要公司内部进行测试,公司内部局域网访问时强制访问加密的https服务,外部用户访问正常的http服务. 第一种方法: if ( $http_x_forwarded_for ~ ^106\.38\.53\.130|210\.12\.103\.18) { return 301 https://www.xxx.cn$request_uri; } #有的说nginx不支持这种if写法,

shell 多重条件判断

多重条件判断 '判断1 -a 判断2' 逻辑与,判断1和判断2都成立,最终的结果才为真 '判断1 -o 判断2' 逻辑或,判断1和判断2有一个成立,最终的结果就为真 '!判断' 逻辑非,使原始的判断式取反 aa=11 [ -n "$aa" -a "$aa" -gt 23 ] &&echo "yes" || echo "no" 判断变量aa是否有值,同时判断变量aa是否大于23 因为变量aa的值不大于23,所以虽

Nginx 多重判断

说明:nginx 不支持&& 和嵌套if判断 #多重判断,匹配移动端和http_host为xxx.com跳转到m.xxx.com set $flag 0; if ( $http_user_agent ~ "(iPhone)|(Android)" ) { set $flag "${flag}1"; } if ( $http_host ~* "^(xxx\.com)$" ) { set $flag "${flag}1&quo

F 多重背包 判断能否刚好装满

Description 有n种不同大小的数字,每种各个.判断是否可以从这些数字之中选出若干使它们的和恰好为K. Input 首先是一个正整数T(1<=T<=100)接下来是T组数据每组数据第一行是一个正整数n(1<=n<=100),表示有n种不同大小的数字第二行是n个不同大小的正整数ai(1<=ai<=100000)第三行是n个正整数mi(1<=mi<=100000),表示每种数字有mi个第四行是一个正整数K(1<=K<=100000) Outp

多重启动判断之锁文件

public static void main(String[] args)    throws ClassNotFoundException  {    logger.info("Agent 正在启动");    logger.info("设置文件锁,保证单实例");    FileLock flock = null;    try    {      flock = new FileOutputStream("/opt/usp/agent/agent.

Nginx 主要应用场景

前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,还请见谅,同时欢迎留言交流 Nginx能做什么 1.反向代理 2.负载均衡 3.HTTP服务器(包含动静分离) 4.正向代理 以上就是了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(ReverseProxy)方式是指以代理服务器来接受

nginx启动、重启、关闭

一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/nginx/sbin ./nginx -s reload 判断配置文件是否正确 nginx -t -c /usr/local/nginx/conf/nginx.conf 或者 cd /usr/local/nginx/sbin ./nginx -t 三.关闭 查询nginx主进程号 ps -ef | grep

linux安装nginx

nginx启动.重启.关闭 安装: http://www.cnblogs.com/skynet/p/4146083.html 一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/nginx/sbin ./nginx -s reload 判断配置文件是否正确 nginx -t -c /usr/local/nginx/conf/nginx.conf 或者 cd