网站服务location模块 实现访问控制隔离(deny allow)
网站服务rewrite模块 实现地址访问跳转功能
1)出于网络安全考虑 http --> https
2) 域名变更访问考虑 www.360buy.com —> www.jd.com
3) 需要调整显示uri信息 www.oldboy.com/sa/1/2 --> www.oldboy.com/sa/
location模块作用说明:根据不同URI信息
,进行不同处理
灵活调整站点目录
比如:
访问图片信息: /html/www/img/ oldboy.jpg
访问视频信息: /html/www/av/ oldboy.mp4
访问文档信息: /html/www/txt/ oldboy.txt
配置文件中的信息
location ~ \.jpg$ {
root /html/www/img;
}
location ~ \.mp4$ {
root /html/www/av;
}
location ~ \.txt$ {
root /html/www/txt
}
Syntax: location [ = | ~ | ~* | ^~ ] uri { 对匹配uri进行哪些处理 }
location @name { … }
Default: —
Context: server, location
= --- 进行uri信息精确匹配 = /sa/ www.oldboy.com/sa/
~ --- 进行uri信息匹配(区分大小写匹配) ~ /sa/ www.oldboy.com/sa/ www.oldboy/sa/01/oldboy.html
~* --- 进行uri信息匹配(不区分大小写匹配) ~* /sa/ www.oldboy.com/sa/ www.oldboy.com/SA/
^~ --- 进行uri信息优先匹配 问题不识别正则信息
location = /sa/ {
return 302; ---返回指定状态码
}
location ~ /sa {
return 303;
}
location ~* \.jpg {
return 402;
}
location ^~ /sa/ {
return 504;
}
root和alias区别:
root --- 可以指定站点目录
配置信息:
location ~ /sa/ {
root /html/www/;
}
www.oldboy.com/sa/ --> /html/www/sa/首页文件
alias --- 可以指定站点目录
配置信息:
location ~ /sa/ {
alias /html/www/sa_new/;
}
www.oldboy.com/sa/ 页面信息 ---> /html/www/sa_new/页面
网页页面实现跳转功能:
方法一:rewrite指令
Syntax: rewrite regex(正则匹配信息) replacement(重写/跳转指定信息) [flag] 跳转方式;
Default: —
Context: server, location, if
跳转方式:
bareak
:将访问URI信息直接进行跳转改变,不会重新建立新的连接请求访问。
原理过程:
用户访问地址信息时 — 服务端根据uri信息进行location匹配 — 完成跳转(break)
请求报文信息直接发生改变
原有请求报文 请求uri /break 改变 新的请求信息 uri /test — 访问站点目录中test目录/index.html
识别location /test 里面信息 return ok info
出席晚会 匹配是否穿西服 --> 现场给你一套西服
last:将访问URI信息进行跳转改变,会让客户端重新建立新的访问,从而匹配新的location
原理过程:
用户访问地址信息时 — 服务端根据uri信息进行location匹配 — 完成跳转(last)
重新由客户端发起访问 rewrite.oldboy.com/test/ — 服务端根据uri信息进行location – 匹配/test
出席晚会 匹配是否穿西服 --> 请穿上西服再过来 --> 回家换上西服
redirect 临时跳转 302 不会叫跳转过程进行保存,每次跳转都有哦服务端进行控制。
permanent 永久跳转 301 会将跳转过程保存在浏览器中
实践配置过程:
rewrite.conf
server {
listen 80;
server_name rewrite.oldboy.com;
root /html/rewrite;
location ~ ^/break/ {
rewrite ^/break/ /test/ break;
}
location ~ ^/last/ {
rewrite ^/last/ /test/ last;
}
location /test/ {
default_type application/json;
return 200 'ok info';
}
}
方式二:return指令
作用:
01 主要实现URI信息跳转
02 主要实现固定URI信息跳转
Syntax: return code状态码 [text]文本信息; return code URL; return URL;
Default: —
Context: server, location, if
return指令跳转测试:
www.oldboy.com/sa/oldboy.jpg --> www.oldboy.com/sa_new/oldboy.jpg
配置信息:
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
location ~ /sa/ {
return 302 http://www.oldboy.com/sa_new/oldboy.jpg;
}
}
跳转实际配置:
案例一:将URI信息进行跳转
用户访问网站URI信息 /abc/1.html 实际访问 /ccc/bbb/2.html
实现跳转过程:
http://rewrite.oldboy.com/abc/1.html --->http://rewrite.oldboy.com/ccc/bbb/2.html
环境准备:
cd /html/rewrite
mkdir ccc/bbb -p
echo ccc_bbb_2 > ccc/bbb/2.html
跳转配置:
# cat /etc/nginx/conf.d/rewrite.conf
server {
listen 80;
server_name rewrite.oldboy.com;
root /html/rewrite;
location /abc {
#rewrite (.*) /ccc/bbb/2.html redirect;
return 302 /ccc/bbb/2.html;
}
}
案例二:将URI信息进行跳转
用户访问URI /2019/ccc/bbb/2.html 目录信息改变 /2020/ccc/bbb/2.html
实现跳转过程:
http://rewrite.oldboy.com/2019/ccc/bbb/2.html --> http://rewrite.oldboy.com/2020/ccc/bbb/2.html
环境准备:
cd /html/rewrite
mkdir 2020/ccc/bbb/ -p
echo 2020_2> 2020/ccc/bbb/2.html
跳转配置:
location /2019 {
rewrite ^/2019/(.*)$ /2020/$1 redirect;
}
案例三:将URI信息进行跳转
用户访问: uri oldboy-11-22-33.html 实际访问 /oldboy/11/22/33/oldboy_33.html
实现跳转
http://rewrite.oldboy.com/oldboy-11-22-33.html --> http://rewrite.oldboy.com/oldboy/11/22/33/oldboy.html
环境准备:
cd /html/rewrite
mkdir oldboy/11/22/33/ -p
echo oldboy-11-22-33 > oldboy/11/22/33/oldboy.html
跳转配置:
location /
rewrite ^/oldboy-(.*)-(.*)-(.*).html /oldboy/$1/$2/$3/oldboy.html redirect;
rewrite实现URL信息跳转
方式一:多个虚拟主机实现跳转
server {
listen 80;
server_name www.oldboy.com;
rewrite (.*) http://www.newboy.com$1;
}
server {
listen 80;
server_name www.newboy.com;
location / {
root /html/www/;
index index.html;
}
}
方式二:借助if判断指令实现跳转
server {
listen 80;
server_name www.oldboy.com;
rewrite (.*) http://www.newboy.com$1;
}
server {
listen 80;
server_name www.oldboy.com www.newboy.com;
location / {
if ($http_host = www.oldboy.com) {
rewrite (.*) http://www.newboy.com$1;
}
root /html/www/;
index index.html;
}
}
root和alias
的区别:
root指定站点目录,在站点目录下搜索首页文件
alias指定站点目录,location后面URI信息时匹配信息,可以不存在。
但是alias后面指定的信息必须真实存在,并不能使用~ 进行匹配,必须使用^~进行匹配,否则会出现无限跳转的情况。
可以说是alias与^~进行配套使用。