nginx服务 location模块、rewrite模块

网站服务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与^~进行配套使用。

发布了170 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42506599/article/details/104305237