前言

nginx配置文件中,可以使用if语句,但是对于else语句其实是不支持的,并且and条件和or条件也是不支持的

实现
  1. else条件的写法

    新建一个开关变量flag,初始值为0,如果为1说明进入了if

    set $flag 0;
    if () {
    // 这里是if的代码
    // -----
    <span class="token comment">// 将控制变量置为1,代表已经进入了if</span>
    set <span class="token variable">$flag</span> <span class="token number">1</span><span class="token punctuation">;</span>

    }

    if ($flag != 1) {

    // 进入这里说明没有进入if中

    // 这里是else的代码

    }

  2. or条件的写法

    新建一个条件变量flag,初始值为0,如果为1说明起码有一个条件成立

    set $flag 0;
    
    if () {

    set \(flag</span> <span class="token number">1</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    set <span class="token variable">\)flag 1;

    }

    if () {

    set $flag 1;

    } if ($flag = 1) {

    // 这里写or条件的代码

    }
  3. and条件的写法

    新建一个条件变量flag,初始值为空字符串,如果全部是1说明所有条件都成立

    set $flag "";
    
    if () {

    set \(flag</span> <span class="token double-quoted-string string">"\){flag}1";

    }

    if () {

    set \(flag</span> <span class="token double-quoted-string string">"\){flag}1";

    }

    if () {

    set \(flag</span> <span class="token double-quoted-string string">"\){flag}1";

    } if ($flag ~* "111") {

    // 这里写and条件的代码

    }
具体案例

跨域请求中配置不同的域名

  # 声明一个控制变量,做到类似else效果
set $switchVarible 0; if (\(http_origin</span> <span class="token operator">~</span><span class="token operator">*</span> <span class="token double-quoted-string string">"^https://www.aliwork.com\)") {

set \(cors_origin</span> <span class="token variable">\)http_origin;

set \(switchVarible</span> <span class="token number">1</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">\)http_origin ~ "^https://localohost:8000\("</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
set <span class="token variable">\)cors_origin \(http_origin</span><span class="token punctuation">;</span>
set <span class="token variable">\)switchVarible 1;

}

if (\(switchVarible</span> <span class="token operator">!=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
set <span class="token variable">\)cors_origin '
';

} add_header Access-Control-Allow-Origin $cors_origin;

add_header Access-Control-Allow-Credentials true;

[转帖]nginx配置文件中对于if条件语句的写法(附nginx跨域文件配置)的更多相关文章

  1. vb编程中的选择结构语句的写法

    1996年,Bohra和Jacopin提出了结构化算法的3中种基本结构:顺序结构.选择结构和循环结构 目前已经得到证明,无论多么复杂的程序,都是由上面的3种基本结构中的一种或者多种的组合构成 在此笔者 ...

  2. nginx反向代理跨域基本配置与常见误区

    最近公司前后端分离,前端独立提供页面和静态服务很自然的就想到了用nginx去做静态服务器.同时由于跨域了,就想利用nginx的反向代理去处理一下跨域,但是在解决问题的同时,发现网上有些方案的确是存在一 ...

  3. nginx配置文件中的location理解

    关于一些对location认识的误区 1. location 的匹配顺序是"先匹配正则,再匹配普通". 矫正: location 的匹配顺序其实是"先匹配普通,再匹配正则 ...

  4. nginx配置文件中的location详解

    location 语法:location [=|~|~*|^~] /uri/ { … } 默认:否 上下文:server 这个指令随URL不同而接受不同的结构.你可以配置使用常规字符串和正则表达式.如 ...

  5. 对于nginx配置文件中的fastcgi_param的配置错误

    在centos中搭建LNMP的时候,遇到了一个问题 在浏览器中访问.php文件的时候,nginx不能正常解析,页面返回404,后来百度了一下,发现了问题 在nginx的配置文件nginx.conf中的 ...

  6. nginx配置文件中location说明

    1 nginx配置文件 文件结构 ... #全局块 events { #events块 ...} http #http块 { ... #http全局块 server #server块 { ... #s ...

  7. 对于nginx配置文件中的fastcgi_param相关参数的理解

    今天在ubuntu中搭建LNMP的时候,遇到了一个问题 在浏览器中访问.php文件的时候,nginx不能正常解析,页面只是空白,后来百度了一下,发现了问题 在nginx的配置文件nginx.conf中 ...

  8. nginx配置文件说明(包含IP黑名单、代理反射、负载均衡的配置)

    先看下nginx配置文件整体结构 图片来源51cto 配置文件及注解: #运行用户 主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行 user nobody; ...

  9. shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...

  10. shell脚本中的if条件语句介绍和使用案例

    #前言:在生产工作中if条件语句是最常使用的,如使用来判断服务状态,监控服务器的CPU,内存,磁盘等操作,所以我们需要熟悉和掌握if条件语句. #简介 if条件语句,简单来说就是:如果,那么.有if单 ...

随机推荐

  1. Python——第二章:文件操作

    文件操作 1. 找到这个文件. 双击打开它 open(文件路径, mode="", encoding="") 文件路径: 1. 绝对路径 d:/test/xxx ...

  2. DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)

    前言 什么是UNC 什么是DNSlog注入 DNSlog注入的条件 防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候,面试官问我知不知道OOB(带外数据). 当时我蒙了, ...

  3. SQLite3使用笔记(1)——查询

    目录 1. 概述 2. 详论 2.1. 打开/关闭数据库 2.2. 数据查询 3. 参考 1. 概述 SQLite是一个嵌入式SQL数据库引擎.与大多数其他 SQL 数据库不同,SQLite 没有单独 ...

  4. PostgreSQL常用运维SQL

    一.数据库连接 1.获取数据库实例连接数 select count(*) from pg_stat_activity; 2.获取数据库最大连接数 show max_connections 3.查询当前 ...

  5. 实战解析丨如何对Mysql连接请求的tcpdump内容进行分析

    摘要:tcpdump是通过拦截发送和收到的网络连接中的TCP/IP和其他数据包,通过tcpdump工具帮助我们分析三次握手或者四次挥手的数据包情况,就能很容易的帮助我们分析出网络在哪一个步骤出的问题. ...

  6. GaussDB(for Redis)双活容灾支持4大应用场景,为业务安全保驾护航

    摘要:GaussDB(for Redis)的双活解决方案,支持同域主备.同域双主.异地主备.异地双主四大应用场景,提供了安全可靠的容灾能力. 一场火灾引发的思考 2021年3月10日,欧洲某云服务提供 ...

  7. Java的这个强大功能,很多人都不知道

    摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...

  8. 火山引擎DataLeap背后的支持者 - 工作流编排调度系统FlowX

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景介绍 业务场景 在日常工作中,我们时不时需要对某些逻辑进行重复调度,这时我们就需要一个调度系统.根据不同的调度 ...

  9. JDK,Mysql,Tomcat Linux安装

    Linux的软件安装 JDK安装 注意:rpm与软件相关命令 相当于window下的软件助手 管理软件 步骤: 1)查看当前Linux系统是否已经安装java 输入 rpm -qa | grep ja ...

  10. 第04讲:Flink 常用的 DataSet 和 DataStream API

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...