rewrite重写规则,Nginx应用--盗链图片

rewrite重写规则

调整用户浏览的URL,看起来规范 合乎开发及产品人员的需求 为了让搜索引擎收录网站内容,让用户体验更好
企业会将动态URL地址伪装成静态地址提供服务 网站更换新域名后 例如,访问京东的360buy.com会跳转到jd.com
根据特殊的变量、目录、客户端信息进行跳转
URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中

================================================================================ rewrite [flag]; 关键字 正则
替代内容 flag标记 关键字:其中关键字error_log不能改变 正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement flag标记:rewrite支持的flag标记

flag标记说明: last #本条规则匹配完成后,继续向下匹配新的location URI规则 break
#本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址 permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

例子:
rewrite ^/(.*) http://www.czlun.com/$1 permanent;

说明:                                        

rewrite为固定关键字,表示开始进行rewrite匹配规则
regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。
flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上

301 redirect: 301 代表永久性转移(Permanently Moved)
 302 redirect: 302 代表暂时性转移(emporarily Moved )
 ps:这里也顺带记住了两个比较相近的英语单词(permanently、temporarily),嘻哈!

301与302详解:

 详细来说,
 301和302状态码都表示重定向,
 就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,
 这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
 他们的不同在于:
 301:表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),
    搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
 302:表示旧地址A的资源还在(仍然可以访问),
 这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
================================================================================

[kiosk@foundation0 Packages]$ curl -I taobao.com
HTTP/1.1 302 Found
Server: Tengine
Date: Sat, 13 Apr 2019 06:09:35 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: http://www.taobao.com/

[kiosk@foundation0 Packages]$ curl -I www.taobao.com
HTTP/1.1 302 Found
Server: Tengine
Date: Sat, 13 Apr 2019 06:09:42 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
Location: https://www.taobao.com/
Set-Cookie: thw=cn; Path=/; Domain=.taobao.com; Expires=Sun, 12-Apr-20 06:09:42 GMT;
Strict-Transport-Security: max-age=31536000

访问淘宝,发现淘宝做了重定向(注意:需要连接无线)
那如何自动实现https加密呢?
 www.westos.org(实质:http://www.westos.org) 自动跳转到 https://www.westos.org  即:http ---> https

在这里插入图片描述

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

    . : 匹配除换行符以外的任意字符
    ? : 重复0次或1次 例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"
    + : 重复1次或更多次 如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”
    * : 重复0次或更多次 #如“ol*”能匹配“o”及“ol”、“oll”
    \d :匹配数字
    ^ : 匹配字符串的开始
    $ : 匹配字符串的结束
    {n} : 重复n次
    {n,} : 重复n次或更多次
    [c] : 匹配单个字符c
    [a-z] : 匹配a-z小写字母的任意一个

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

location 是在 server 块中配置。可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。

vim nginx.conf

    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
`
        location / {
            root   /web;
            index  index.html index.htm;
        }
    }

server {
        listen 80;
        server_name www.westos.org;
        rewrite ^/(.*)$ https://www.westos.org/$1;	##$1表示用户在这里输入的内容保留,只会重定向$1前面的
	#rewrite ^/(.*)$ https://www.westos.org/$1 permanent;	永久重定向(可以缓存,临时的不允许缓存)
}

permanent 返回301永久重定向

在这里插入图片描述在这里插入图片描述

[kiosk@foundation0 Packages]$ curl -I www.westos.org
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.9
Date: Sat, 13 Apr 2019 06:13:13 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.westos.org/

注意:此处为302临时
在这里插入图片描述

[kiosk@foundation0 Packages]$ curl -I www.westos.org/index.html #$1
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.9
Date: Sat, 13 Apr 2019 06:16:02 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.westos.org/index.html

[kiosk@foundation0 Packages]$ curl -I www.westos.org/test.html #$1
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.9
Date: Sat, 13 Apr 2019 06:16:35 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.westos.org/test.html

在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述############################################################################

#再加一台虚拟主机

    server {
        listen       443 ssl;
        server_name  www.westos.org bbs.westos.org;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        #location / {
        #    root   /web;
        #    index  index.html index.htm;
        #}
        location / {
                root    /bbs;
                index   index.html;
        }

    }

在这里插入图片描述

#重定向2

server {
        listen 80;
        server_name www.westos.org;
	#rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
	rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;	#表示访问www.westos.org并且以bbs结尾的,都定向到https://bbs.westos.org,而访问的页面就是location中/bbs/index.html

在这里插入图片描述

mkdir /bbs
vim /bbs/index.html
<h1>bbs.westos.org</h1>

nginx -s reload
尝试访问是否正常

在这里插入图片描述

curl -I www.westos.org/bbs
[root@foundation0 ~]# curl bbs.westos.org
<h1>bbs.westos.org</h1>
[root@foundation0 ~]# curl -I www.westos.org/bbs
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.9
Date: Sat, 13 Apr 2019 06:32:00 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://bbs.westos.org/index.html

[root@foundation0 ~]# curl -I www.westos.org/bbs/index.html
HTTP/1.1 404 Not Found
Server: nginx/1.15.9
Date: Sat, 13 Apr 2019 06:32:05 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

在这里插入图片描述

重定向3:多次重定向

server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root    /bbs;
                index   index.html;
        }
}

server {
        listen 80;
        server_name www.westos.org;
	#rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        rewrite ^/bbs$ http://bbs.westos.org permanent;
        rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
#浏览器测试:是bbs.westos.org对应的根目录


'先匹配第一条重写规则定向到bbs.westos.org,然后再定向到下一条规则'

#重定向4:整合
server {
        listen 80;
        server_name www.westos.org bbs.westos.org;
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        #rewrite ^/bbs$ http://bbs.westos.org permanent;
        #rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
        if ($host = "bbs.westos.org") {   #$host : 请求主机头字段,否则为服务器名称
                rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
        }
        location / {
                root    /web;
                index   index.html;
        }
}

nginx -s reload
cd /web/
cp -r /bbs/ .
测试:curl -I bbs.westos.org

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

nginx配置防盗链
1.先配置盗链,server1上的vim.jpg被盗链,server2是盗链者
server1上不需要改变什么配置,只用把www.westos.org这个域名保留

在server2上修改虚拟主机配置:
server {
        listen 80;
        server_name daolian.westos.org;

        charset utf-8;	#不加这个参数网页上看到的汉字是乱码
        location / {
                root    /web;
                index   index.html;
        }
}

在这里插入图片描述在这里插入图片描述编写配文件 访问daolian.westos.org就去/web/index.html
在这里插入图片描述在这里插入图片描述

	vim /web/index.html
	
	<html>
	
	<body>
	<br>盗链图片</br>
	<img src="http://www.westos.org/vim.jpg">
	
	</body>
	
	
	</html>

注意:此处盗链的是server1 /web/vim.jpg图片
在这里插入图片描述
在物理机和各节点都配置解析
172.25.136.2 daolian.westos.org

物理机:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

server1上需要把vim.jpg资源放到/web目录

server:nginx.conf
server {
        listen 80;
        server_name www.westos.org bbs.westos.org;
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        #rewrite ^/bbs$ http://bbs.westos.org/index.html permanent;
        #rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
#if      ($host = "bbs.westos.org") {
#                rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
#        }
#
       location / {
              root    /web;
                index   index.html;
        }
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
访问: http://daolian.westos.org 发现,访问到了server1上的vim.jpg资源,这就是盗链
在这里插入图片描述在这里插入图片描述在这里插入图片描述server2即使不用添加本地解析也可以实现盗链,
在这里插入图片描述 因此我们也可以设置防防盗链

#配置防盗链
server1上修改配置:
vim nginx.conf

server {
        listen 80;
        server_name www.westos.org ;
        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        #rewrite ^/bbs$ http://bbs.westos.org permanent;
        #rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
        #if ($host = "bbs.westos.org") {
        #        rewrite ^/(.*)$ http://www.westos.org/$1 permanent;
        #}
        location / {
                root    /web;
                index   index.html;
        }

        location ~* \.(gif|jpg|png|jpeg)$ {
                root    /web;
                valid_referers none blocked www.westos.org;
                if ($invalid_referer) {
                        return 403;
                }
        }
}

在这里插入图片描述
当访问域名为www.westos.org时正常访问,否则返回一个不可见小图标
在这里插入图片描述在这里插入图片描述此时发现盗链失败
在这里插入图片描述

#再优化防盗链配置,添加重定向规则
vim nginx.conf

        location ~* \.(gif|jpg|png|jpeg)$ {
                root    /web;
                valid_referers none blocked www.westos.org;
                if ($invalid_referer) {
                        rewrite ^/(.*)$ http://bbs.westos.org/daolian.jpg;
                }
        }
}

server {
        listen 80;
        server_name bbs.westos.org;

        location / {
                root    /bbs;
                index   index.html;
        }
}

当盗链访问server1时,重定向到另外一张图片,警告它是盗链(也可以是给自己打广告的图片^_^)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值