zoukankan      html  css  js  c++  java
  • nginx配置之if,break,return,rewrite

     一、if

    条件判断,并根据结果选择不同的nginx配置
    可以在server块,location块使用
    
    语法:
    if (condition) {
        ...
    }
    
    其中:
    condition:判断条件,包括:
        nginx内置变量
        =,!=: 判断变是否相等
        正则表达式: ~(区分大小写),~*(不区分大小写),!~(~取反),!~*(~*取反)
        -f,!-f: 文件时是否存在
        -d,!-d: 目录是否存在
        -e,!-e: 目录或文件是否在使用
        -x,!-x: 文件是否可执行

    示例

    if ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$ /msie/$1 break;
    }
    
    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
        set $id $1;
    }
    
    if ($request_method = POST) {
        return 405;
    }
    
    if ($slow) {
        limit_rate 10k;
    }
    
    if ($invalid_referer) {
        return 403;
    }

    二、break

    break
    跳出当前作用域,回到上一层继续向下,与break同级且位于后面的会被忽略
    可以在server块,location块,if块中使用

    示例

    if ($slow) {
        limit_rate 10k;
        break;
    }

    三、return

    停止处理请求,直接向客户端返回响应状态码,
    执行return指令后,同一级中后面的指令都会无效
    可以在location块,server块,if块中使用,return指令比rewrite指令简单高效,尽量使用return
    
    语法:
    return code;
    return code [text];
    return code URL;
    return URL;
    
    其中:
    code:返回给客户端的状态码
    第一个语法中的code包含所有的http状态码
    第三个语法中的code包含:
    301:永久重定向
    302:临时重定向
    303:临时重定向,应使用GET方法定向获取请求的资源
    307:临时重定向
    308:永久重定向
    
    text:返回给客户端的响应体内容,支持nginx内置变量
    
    URL(统一资源定位符):重定向后返回给客户端的URL地址

    示例

    1 返回状态码
    
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
         
         location / {
             return 403;
          }
    }
    
    2 返回状态码和响应体内容
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
         
         location / {
             return 200 'Status Code:200';
          }
    }
    使用谷歌浏览器访问会下载包含响应体内容的文本
    
    
    
    3 重定向至其他URL
    
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
         
         location ^~ /web/ {
             root /usr/share/nginx/html;
             index index.hmtl index.htm;
          }
          
          location / {
             return 301 /web/;
    }
    
    
    使用谷歌浏览器访问ip:80会重定向到ip:80/web/
    
    4 不加状态码重定向到其他URL
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
         
         location ^~ /web/ {
             root /usr/share/nginx/html;
             index index.hmtl index.htm;
          }
          
          location / {
             return $scheme://主机ip:80/web/;
    }
    
    使用谷歌浏览器访问ip:80会重定向到ip:80/web/

    四、rewrite

    根据匹配的正则表达式,重写URL
    可以同时存在一个或多个rewrite指令
    可以在location块,server块,if块中使用
    rewrite接收的URI不包括host地址,即访问http:ip:port/test/,rewrite会接受到/test/;
    也不包括请求指令,即访问http:ip:port/test/?a=1&b=3,rewrite会接受到/test/
    
    
    语法:
    rewrite regex replacement [flag]
    
    其中
    regex:用于匹配URI(通用资源标识符)的正则表达式,可以使用"()"来标记要截取的内容
    replacement:用于替换匹配成功后的URI的字符串,支持nginx内置变量
    flag:用于设置rwrite对URI的处理行为,包含:
        last:终止本location块,将重写后的URI使用各location块再次进行处理,一般使用在server块和if块
        break:使用重写后的URL在本location块中继续处理,一般使用在location块
        redirect:将重写后的URI返回给客户端,状态码为302,指明临时重定向
        permanent:将重写后的URI返回给客户端,状态码为301,指明永久重定向

    示例

    1 域名跳转,重写至www.baidu.com
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
          
         location / {
             rewrite '^/test/' http://www.baidu.com ;
    }
    
    使用谷歌浏览器访问ip:80/test/,实际访问http://www.baidu.com
    
    2 
    
    server {
         listen       80;
         server_name  localhost;
         charset      utf-8;
         
         location ^~ /web/ {
             root /usr/share/nginx/html;
             index index.hmtl index.htm;
          }
          
          location / {
             rewrite '^/([a-z]{3})/(.*)' /web/$1/$2 permanent;
    }
    
    其中$1表示引用前面的([a-z]{3}),$2表示引用前面的'(.*)'
    使用谷歌浏览器访问ip:80/aaa/xxx,实际访问http://ip:80/web/aaa/xxx
  • 相关阅读:
    linux 终端分屏命令vsp(转)
    ACE消息队列(转)
    iovec结构体定义及使用 (转)
    转: 写给想成为前端工程师的同学们 (from 360前端团队)
    转:苹果企业级开发者账号申请流程
    奇舞团的博客(360前端团队)
    腾讯开源组件
    转:android studio入门合集
    Raid分类说明 (from mongodb权威指南)
    转: linux下的自动对时
  • 原文地址:https://www.cnblogs.com/gudanaimei/p/13909008.html
Copyright © 2011-2022 走看看