续上一篇博客还环境
rewrite重写规则
调整用户浏览的URL,看起来规范 合乎开发及产品人员的需求
为了让搜索引擎收录网站内容,让用户体验更好 企业会将动态URL地址伪装成静态地址提供服务
网站更换新域名后 例如,访问京东的360buy.com会跳转到jd.com
根据特殊的变量、目录、客户端信息进行跳转
URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中
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,搜索引擎会抓取新的内容而保存旧的网址。
rewrite <regex> <replacement> [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 地址上
. : 匹配除换行符以外的任意字符
? : 重复0次或1次 "do(es)?" do does doeses
+ : 重复1次或更多次 "ol+" ol oll olll o
* : 重复0次或更多次 "ol*" o ol oll
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的结束
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z] : 匹配a-z小写字母的任意一个
例如:
[root@foundation78 ~]# curl -I www.taobao.com
访问淘宝,发现淘宝做了重定向(注意:需要连接无线)
那如何自动实现https加密呢?
www.westos.org(实质:http://www.westos.org) 自动跳转到 https://www.westos.org 即:http ---> https
【server2】
location 是在 server 块中配置。可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。
【1】
cd /usr/local/nginx/conf/
vim nginx.conf
server {
listen 80;
server_name www.westos.org;
rewrite ^/(.*)$ https://www.westos.org/$1; ##后面跟$1,都会自动调转到https://www.westos.org/$1的网址
}
nginx -s reload
测试:
物理机:
vim /etc/hosts
172.25.78.2 www.westos.org
vim /etc/resolv.conf
nameserver 114.114.114.114
curl -I www.westos.org
curl -I www.westos.org/test
vim vim /usr/local/nginx/conf/nginx.conf
vim /etc/hosts
vim /etc/resolv.conf
【2】
vim vim /usr/local/nginx/conf/nginx.conf
rewrite ^/(.*)$ https://www.westos.org/$1 permanent; ##永久重定向(可以缓存,临时的不允许缓存),表示永久301重定向标记,即跳转到新的 https://www.westos.org/$1 地址上
nginx -s reload
测试:
curl -I www.westos.org/test.html
curl -I www.westos.org/
vim vim /usr/local/nginx/conf/nginx.conf
【3】增加一个域 bbs.westos.org;
mkdir /bbs
vim /bbs/index.html
<h1>bbs.westos.org</h1>
vim /usr/local/nginx/conf/nginx.conf
129: server_name www.westos.org bbs.westos.org;
140 location / {
141 root /bbs;
142 index index.html ;
143 }
150: rewrite ^/bbs$ https://bbs.westos.org/index.html permanent;
##以bbs结尾ie的都会调转到https://bbs.westos.org/index.html
nginx -s reload
测试:
vim /etc/hosts
172.25.78.2 www.westos.org bbs.westos.org
curl -I www.westos.org/bbs
vim vim /usr/local/nginx/conf/nginx.conf
【4】
vim /usr/local/nginx/conf/nginx.conf
145 server {
146 listen 80;
147 server_name www.westos.org bbs.westos.org;
148 if ($host = "bbs.westos.org") { #$host : 请求主机头字段,否则为服务器名称
149 rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
150
151 }
152 location / {
153 root /web;
154 index index.html ;
155 }
156
157
158 }
159 }
cd /web/ ---> ls
cp -r /bbs/ . --->ls
nginx -s reload
curl -I bbs.westos.org/
curl -I bbs.westos.org/bbs/
curl -I bbs.westos.org/bbs/test.html
vim vim /usr/local/nginx/conf/nginx.conf
【5】
vim /usr/local/nginx/conf/nginx.conf
145 server {
146 listen 80;
147 server_name www.westos.org bbs.westos.org;
148 rewrite ^/bbs$ https://bbs.westos.org/index.html permanent; #表示访问bbs.westos.org并且以bbs结尾的,都定向到https://bbs.westos.org
注释149~152
153 location / {
154 root /web;
155 index index.html ;
156 }
157
158
159 }
nginx -s reload
测试:
规则写到了443:所以用https来访问
https://bbs.westos.org
vim vim /usr/local/nginx/conf/nginx.conf
Nginx应用—图片盗链,防盗链
模拟盗链
实验环境
server1 盗链主机(server1盗链server2的资源)
server2 防盗链主机
物理机:客户端主机
这里servre1的环境用蓝色表示
server2用黑色表示
【server1】(没有nginx的话,自己再编译一个)
【1】用server1主机来进行盗链操作,
建立默认的访问页
mkdir /web
vim /web/index.html
<html>
<body>
<br>盗链图片</br>
<img src="http://www.westos.org/vim.jpg">
</body>
</html>
【2】修改虚拟主机配置:
vim /usr/local/nginx/conf/nginx.conf
115 server {
116 listen 80;
117 server_name daolian.westos.org;
118 charset utf-8; ##加入编码方式,不加这个参数网页上看到的汉字是乱码
119 location / {
120 root /web;
121 index index.html ;
122 }
123
124 }
125 }
nginx
nginx -t
nginx -s reload
vim vim /usr/local/nginx/conf/nginx.conf
【server2】
server2上需要把vim.jpg资源放到/web目录
cd /web/ ---> ls ##有vim.jpg (没有图片的话,自己移一个图片到/web目录下)
vim /usr/local/nginx/conf/nginx.conf
145 server {
146 listen 80;
147 server_name www.westos.org;
148 location / {
149 root /web;
150 index index.html ;
151 }
152
153 }
nginx -s reload
【物理机,server1,server2】在物理机和各节点都配置解析
vim /etc/hosts
172.25.78.1 server1 daolian.westos.org
物理机测试:
浏览器中访问daolian.westos.org
##可以看到我们访问的是server1的ip对应的域名,
但是拿到的却是server2的资源(因为server1没有,所以叫盗链)
模拟防盗链
【server2】
vim /usr/local/nginx/conf/nginx.conf
153 location ~* \.(gif|jpg|png|jpeg)$ {
154 root /web;
155 valid_referers none blocked www.westos.org;
156 if ($invalid_referer) {
157 return 403;
158 }
159 }
nginx -s reload
【server1】默认发布下的内容,依旧是盗链的访问页
vim /web/index.html
<html>
<body>
<br>盗链图片</br>
<img src="http://www.westos.org/vim.jpg">
</body>
</html>
测试:daolian.westos.org
当访问域名为www.westos.org时正常访问,否则返回一个不可见小图标