nginx 重写 rewrite 基础及实例(转)上海时时乐走

上海时时乐走势图 1

nginx rewrite 正则表达式匹配

一、ngx_http_rewrite_module
The ngx_http_rewrite_module module is used tochange request URI using PCRE regular expressions,
return redirects, and conditionally select configurations.
将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换

示例:
http://www.a.com/hn--> http://www.a.com/henan
http://www.a.com--> https://www.a.com/

1、 rewrite regex replacement [flag]

将用户请求的URI基于regex所描述的模 式进行检查,匹配到时将其替换为replacement指定的新的URI
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查隐含有循环机制,但不超过10次;
如果超过,提示500响应码, [flag]所表示的标志位用于控制此循环机制
如果replacement是以

 [flag]:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;
结束循环,建议在location中使用
redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
不能以http://或https://开头,使用相对路径,状态码: 302
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301

zz页面跳转到zhengzhou

上海时时乐走势图 2

临时重定向

上海时时乐走势图 3

上海时时乐走势图 4

永久重定向

上海时时乐走势图 5

上海时时乐走势图 6

上海时时乐走势图 7

location /zz 也可以针对zz uri做访问控制 访问zz目录旧跳转到zhengzhou目录下,内容更清晰作用根上面一样

上海时时乐走势图 8

2、 return  
作用域:server,location,if
return code [text];
return code URL;
return URL;
停止处理,并返回给客户端指定的响应码

3、 rewrite_log on | off;
是否开启重写日志, 发送至error_log( notice level)

 4、 set $variable value;
用户自定义变量
注意:变量定义和调用都要以$开头

5、 if (condition) { ... }
引入新的上下文,条件满足时,执行配置块中的配置指令; server, location
condition:
比较操作符:
== 相同
!= 不同
~:模式匹配,区分字符大小写
~*:模式匹配,不区分字符大小写
!~:模式不匹配,区分字符大小写
!~*:模式不匹配,不区分字符大小写
文件及目录存在性判断:
-e, !-e 存在(包括文件,目录,软链接)
-f, !-f 文件
-d, !-d 目录
-x, !-x 执行
if指令实例

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;
 }

当访问admin目录时候系统就会返回403和disallow(返回可自定义)

上海时时乐走势图 9

上海时时乐走势图 10

跳转到别的url www.baidu.com

上海时时乐走势图 11

上海时时乐走势图 12

添加状态码跳转

上海时时乐走势图 13

显示302临时跳转

上海时时乐走势图 14

 

location ~/.ht { 

一、ngx_http_rewrite_module
将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换

1、 rewrite regex replacement [flag]
2、 return 
3、 rewrite_log on | off;
4、 set $variable value;
5、 if (condition) { ... }

 

二、ngx_http_referer_module
1、 valid_referers none|

*******************************************************************************************************************************************

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

二、ngx_http_referer_module

通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求.我们应该记住,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求.
The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the
“Referer” header field. 可防止盗链

1、 valid_referers none|blocked|server_names|string ...;
定义referer首部的合法可用值,不能匹配的将是非法值
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:参数,其可以有值作为主机名或主机名模式  本网站
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*.magedu.com

示例:
valid_referers none block server_names *.a.com *.a.com a.* a.* ~.baidu.;
if ($invalid_referer) {
return 403 http://www.a.com; 
}

首部添加从哪里跳转过来的

上海时时乐走势图 15

a页面跳转到b页面

上海时时乐走势图 16

vim index.html website B

上海时时乐走势图 17

上海时时乐走势图 18

nginx -s reload

点击www.b.com会看到b.com的文件内容website B

上海时时乐走势图 19

可以从日志看到跳转信息
cd /var/log/nginx
a.com代表从哪里位置跳转

上海时时乐走势图 20

b.com也可以盗用a.com目录下的a.jpg图片

上海时时乐走势图 21

上海时时乐走势图 22

vim b.html 编写website2目录下的页面

上海时时乐走势图 23

打开b.com显示的图片确是a.com的图片,在用户层面也不知道,对a.com来说消耗了它的带宽来为b.com服务

上海时时乐走势图 24

盗链成功

日志查询可以看到从b.com下载的a.jpg

上海时时乐走势图 25

nginx日志都储存在一起,不容易找到可以给文件设置独立存储

上海时时乐走势图 26

第一个日志上会看到图片被转发到哪个网址上面,b.com就是盗链网站
第二个日志是a.com本机正常访问,被转发位置正常是为空

上海时时乐走势图 27

如何防止referers盗链
允许请求
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:参数,其可以有值作为主机名或主机名模式 本网站
包含baid字符的域名也允许
if.......非法的403,转跳到www.a.com(可自定义网站)

上海时时乐走势图 28

访问www.b.com/b.html 盗链a.com内容已经无法打开,F12可以看到403

上海时时乐走势图 29

应用在flask项目中

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

上海时时乐走势图 30

上海时时乐走势图 31

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

2.防止盗链

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

 

    access_log off; 

防止盗链jpg格式的图片

    rewrite ^. last; 

 

 

上海时时乐走势图 32

    break; 

 

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

符合盗链 —— 重写

 

上海时时乐走势图 33

}

location 语句中的 ~* 表示不区分大小写的正则匹配

location ~ {

说明:if ($invalid_referer) {,if的后面是有空格的,如果没有会配置错误,这个要留意;valid_referers这句后面还可以继续补充允许的主机名

上海时时乐走势图 34

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

上海时时乐走势图 35

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

上海时时乐走势图 36

上海时时乐走势图 37

    auth_basic_user_file htpasswd; 

 

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

########################################################################################################################## 

    index index.html index.htm index.php; 

 

 

“rewrite ^/

 

    break; 

说明:上述配置中的location /images/改为location /,可以防止一切盗链

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

**************************************************************************************************************************************************

    deny all; 

上海时时乐走势图 38 

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

1.测试盗链(www.html2.com 盗取 www.html5.com的图片)

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

符合盗链 —— 返回一个错误

server { 

location ~(favicon.ico) { 

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

    server_name mirror.jjonline.cn; 

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

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

    } 

规则如下:

    expires 99d; 

禁止htaccess 

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

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

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

几个实例:

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

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

    log_not_found off; 

location { 

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

域名跳转 

        return 417; 

location ^~ /demo { 

        rewrite ^/ ; 

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

    access_log off; 

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

location ~(robots.txt) { 

    access_log off; 

目录对换 

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

规则配置:

location ~ ^/data { 

 

    expires 600; 

    rewrite ^/(.*) last; 

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

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

    root /var/www/public_html/; 

    listen 80; 

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

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

}

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

    break; 

        rewrite ^(.*) permanent; 

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

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

禁止多个目录 

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

    rewrite ^/ ;  #跳转到这个网页去

    deny all; 

~ 为区分大小写匹配 

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

防盗链的设置:

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

 

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

    log_not_found off; 

    break; 

 

    expires 7d; 

}

server { 

    root /var/www/public_html; 

if (!-e $request_filename) { 

禁止单个文件 

    deny all; break; 

 

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

    deny all; 

 

    break; 

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

多目录转成参数 

        break; 

if (-d $request_filename){ 

rewrite ^/(.*)([^/])$ permanent; 

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

 

    } 

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

~* 为不区分大小写匹配 

}

server { 

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

大小写匹配

    }

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

域名镜向 

    allow 22.27.164.25; #允许的ipd

    index index.html index.htm index.php; 

规则配置:

 

    break; 

    deny all; 

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

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

flag标记

    listen 80; 

    if (!-e $request_filename) {

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

    set $sub_name $1;

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

location ~ /data/sql/data.sql { 

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

 

logcation的几个使用实例:

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

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

location ~ ^/(cron|templates)/ { 

三级域名跳转 

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

 

    if ($invalid_referer) { 

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

    rewrite ^(.*) ; 

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

    access_log off; 

    listen 80; 

 if ($http_user_agent ~ MSIE) {

文件及目录匹配

多域名转向 

    rewrite ^/ ; 

 

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

 

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

说明:

本文由上海时时乐走势图发布于上海时时乐走势图,转载请注明出处:nginx 重写 rewrite 基础及实例(转)上海时时乐走

您可能还会对下面的文章感兴趣: