zoukankan      html  css  js  c++  java
  • Nginx的rewrite配置

    大小写匹配

    ~ 为区分大小写匹配 

    ~* 为不区分大小写匹配 

    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 

    文件及目录匹配

    -f和!-f用来判断是否存在文件 

    -d和!-d用来判断是否存在目录 

    -e和!-e用来判断是否存在文件或目录 

    -x和!-x用来判断文件是否可执行 

    flag标记

    last 相当于Apache里的[L]标记,表示完成rewrite

    break 终止匹配, 不再匹配后面的规则。

    redirect 返回302临时重定向 地址栏会显示跳转后的地址。

    permanent 返回301永久重定向 地址栏会显示跳转后的地址。

    logcation的几个使用实例:

       1)location  / { }:匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。
       2)location =/ {}:仅仅匹配/
       3)location ~* .(gif|jpg|jpeg)$

         {
            rewrite .(gif|jpg)$ /logo.png;
         }:location不区分大小写,匹配任何以gif,jpg,jpeg结尾的文件。

    几个实例:

    多目录转成参数 

    要求:abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2 

    规则配置:

    if ($host ~* (.*).domain.com) { 

        set $sub_name $1;

        rewrite ^/sort/(d+)/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; 

    目录对换 

    要求:/123456/xxxx -> /xxxx?id=123456 

    规则配置:

    rewrite ^/(d+)/(.+)/ /$2?id=$1 last; 

    再来一个针对浏览器优化的自动rewrite,这里rewrite后的目录可以是存在的;

    例如设定nginx在用户使用ie的使用重定向到/nginx-ie目录

    规则如下:

     if ($http_user_agent ~ MSIE) {

         rewrite ^(.*)$ /nginx-ie/$1 break; 

    目录自动加“/” ,这个功能一般浏览器自动完成

    if (-d $request_filename){ 

    rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; 

    以下这些可能就跟广义的rewrite重写无关了

    禁止htaccess 

    location ~/.ht { 

        deny all; 

    禁止多个目录 

    location ~ ^/(cron|templates)/ { 

        deny all; break; 

    禁止以/data开头的文件,可以禁止/data/下多级目录下.log.txt等请求

    location ~ ^/data { 

        deny all; 

    禁止单个文件 

    location ~ /data/sql/data.sql { 

        deny all; 

    给favicon.ico和robots.txt设置过期时间; 这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志 

    location ~(favicon.ico) { 

        log_not_found off; 

        expires 99d; 

        break; 

    location ~(robots.txt) { 

        log_not_found off; 

        expires 7d; 

        break; 

    设定某个文件的浏览器缓存过期时间;这里为600秒,并不记录访问日志 

    location ^~ /html/scripts/loadhead_1.js { 

        access_log off; 

        expires 600; 

        break; 

    Nginx还可以自定义某一类型的文件的保质期时间,具体写法看下文的代码:

    location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {
    if (-f $request_filename) {
       expires    1h;
       break;
      }
      }

    //上段代码就将js|css|jpg|jpeg|gif|png|swf这类文件的保质期设置为一小时。

    防盗链的设置:

    防盗链:如果你的网站是个下载网站,下载步骤应该是先经过你的主页找到下载地址,才能下载,为了防止某些网友直接访问下载地址完全不通过主页下载,我们就可以使用防盗链的方式,具体代码如下:

    location ~* .(gif|jpg|swf)$ {
      valid_referers none blocked start.igrow.cn sta.igrow.cn;
      if ($invalid_referer) {
      rewrite ^/ http://$host/logo.png;
      }
    }

    文件反盗链并设置过期时间--<盗链多次请求也会打开你的站点的图片啊,所以设置下缓存时间,不会每次盗链都请求并下载这张图片>

    location ~* ^.+.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { 

        valid_referers none blocked *.jjonline.cn *.jjonline.com.cn *.lanwei.org *.jjonline.org localhost  42.121.107.189; 

        if ($invalid_referer) { 

            rewrite ^/ http://img.jjonline.cn/forbid.gif; 

            return 417; 

            break; 

        } 

        access_log off; 

        break; 

    说明:

    这里的return 417 为自定义的http状态码,默认为403,方便通过nginx的log文件找出正确的盗链的请求地址 

    “rewrite ^/ http://img.jjonline.cn/forbid.gif;”显示一张防盗链图片

     “access_log off;”不记录访问日志,减轻压力 

    “expires 3d”所有文件3天的浏览器缓存 

    只充许固定ip访问网站,并加上密码;这个对有权限认证的应用比较在行

    location { 

        allow 22.27.164.25; #允许的ipd

        deny all; 

        auth_basic “KEY”; #认证的一些设置

        auth_basic_user_file htpasswd; 

    }

    说明:location的应用也有各种变化,这里的写法就针对了根目录了。

    文件和目录不存在的时重定向

    if (!-e $request_filename) { 

        #proxy_pass http://127.0.0.1; #这里是跳转到代理ip,这个代理ip上有一个监听的web服务器

        rewrite ^/ http://www.jjonline.cn/none.html;  #跳转到这个网页去

        #return 404; #直接返回404码,然后会寻找root指定的404.html文件

    域名跳转 

    server { 

        listen 80; 

        server_name jump.jjonline.cn ;#需要跳转的多级域名

        index index.html index.htm index.php; #入口索引文件的名字

        root /var/www/public_html/; #这个站点的根目录

        rewrite ^/ http://www.jjonline.cn/; 

        #rewrite到这个地址,功能表现:在浏览器上输入jump.jjonline.cn并回车,不会有任何提示直接变成www.jjonline.cn

        access_log off; 

    多域名转向 

    server { 

        listen 80; 

        server_name www.jjonline.cn www.jjonline.org;

        index index.html index.htm index.php; 

        root /var/www/public_html/; 

        if ($host ~ “jjonline.org”) { 

            rewrite ^(.*) http://www.jjonline.cn$1 permanent; 

        } 

    }

    三级域名跳转 

    if ($http_host ~* “^(.*).i.jjonline.cn$”) { 

        rewrite ^(.*) http://demo.jjonline.cn$1; 

        break; 

    域名镜向 

    server { 

        listen 80; 

        server_name mirror.jjonline.cn; 

        index index.html index.htm index.php; 

        root /var/www/public_html; 

        rewrite ^/(.*) http://www.jjonline.cn/$1 last; 

        access_log off; 

    某个子目录作镜向,这里的示例是demo子目录

    location ^~ /demo { 

        rewrite ^.+ http://demo.jjonline.cn/ last; 

        break; 

    }

    以下在附带本博客的rewrite写法,emlog系统的rewrite

    location ~ {

        if (!-e $request_filename) {

               rewrite ^/(.+)$ /index.php last;

        }

    }

     
     
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/netRob/p/4991729.html
Copyright © 2011-2022 走看看