1.动静分离

6 篇文章 0 订阅

1.什么是动静分离

将动态请求和静态请求区分访问,

2.为什么要做动静分离?

静态由Nginx处理, 动态由PHP处理或Tomcat处理....

因为Tomcat程序本身是用来处理jsp代码的,但tomcat也能处理静态资源.

tomcat本身处理静态效率不高,还会带来资源开销.

3.如何实现动静分离?

Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理。

如果请求的url是.php或者.jsp等等,这个时候这个请求是动态的,将转发给tomcat处理。

总结来说,Nginx是通过url来区分请求的类型,并转发给不同的服务端。

4.单机实现动静分离实战

 

[root@web01 ~]# yum install java tomcat -y ​ [root@web01 ~]# mkdir /usr/share/tomcat/webapps/ROOT -->主要站点根目录 ​ [root@web01 ~]# vi /usr/share/tomcat/webapps/ROOT/index.jsp ​ <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> ​ <html> <head> <title>Nginx+Tomcat</title> </head> ​ <body> ​ <% ​ Random rand = new Random(); ​ out.println("<h2>动态资源</h2>"); ​ out.println(rand.nextInt(99)+100); ​ %> <h2>静态图片</h2> ​ <img src="nginx.png" /> ​ </body> ​ </html>

 

[root@web01 ~]# wget -O /usr/share/tomcat/webapps/ROOT/nginx.png http://nginx.org/nginx.png [root@web01 ~]# systemctl start tomcat

tomcat监听在8080端口上:

 

#配置Nginx [root@web01 conf.d]# cat ds.oldxu.com.conf server { listen 80; server_name ds.oldxu.com; location / { proxy_pass http://127.0.0.1:8080; } location ~* \.(png|gif|jpg|mp4)$ { root /images; expires 1d; } }

 

5.集群实现动静分离实战 [root@web01 conf.d]# cat ds.oldxu.com.conf server { listen 80; server_name ds.oldxu.com; location / { proxy_pass http://127.0.0.1:8080; } } [root@web02 conf.d]# cat ds.old.com.conf server { listen 80; server_name ds.old.com; location / { root /images; [root@lb01 conf.d]# cat proxy_ds.oldxu.com.conf upstream java { server 172.16.1.7:8080; } upstream static { server 172.16.1.8:80; } server { listen 80; server_name ds.oldxu.com; location / { proxy_pass http://java; include proxy_params; } location ~* \.(png|gif|jpeg)$ { proxy_pass http://static; expires 2d; include proxy_params; } }

 

1|1本章课程内容大纲

 

1.什么是Rewrite?

Rewirte 主要实现url地址重写,以及地址跳转。

就是将用户的请求web 服务器的url地址重新修改为其他url地址的过程

2.Rewrite使用场景?

地址跳转

协议跳转

url 静态化

3.Rewrite实现原理?

4.Rewrite URL重写配置场景?

set 设置变量

if 负责语句中的判断

return 返回值或url

break 终止后续的rewrite 规则

rewrite 重定向url

5.Rewrite URL重写配置场景?

10案例

6.Rewrite URL重写falg标记?

7.Rewrite URL重写生产实践?

 

将用户的请求url.oldxu.com.cn跳转至url.oldxu.com/zh 将用户的请求urk.oldxu.com.cn跳转至url.oldxu.com/jp [root@web01 conf.d]# cat url.oldxu.com.conf server { listen 80; server_name url.oldxu.com.cn url.oldxu.com.jp; #判断 if ( $http_host ~* cn ) { set $language zh; } if ( $http_host ~* jp ) { set $language jp; } rewrite ^/$ http://url.oldxu.com/$language/; } server { listen 80; server_name url.oldxu.com; location / { root /data; } }

 

if指令场景示例 根据用户的浏览器使用的语言自动判断并跳转至不同的语言界面 中国 url.oldxu.com ---> url.oldxu.com --->中文 english url.oldxu.com ---> url.oldxu.com --->english server { listen 80; server_name url.oldxu.com; location / { if ( $http_accept_language ~* "en" ) { set $language en; } if ( $http_accept_language ~* "zh|zh-CN" ) { set $language zh; } ​ root /data/$language; } }

 

if指令场景示例 nginx过滤请求中包含a1=3526的http请求到10.16.3.5的8080端口处理 server { listen 80; server_name url.oldxu.com; location / { default_type text/html; if ($request_uri ~* "a1=3526") { return 200 "https://www.jd.com"; } if ($request_uri ~* "git"){ return 403; } if ($request_uri ~* "^/test") { return 302 "https://www.jd.com"; } if ( $http_accept_language ~* "en" ) { set $language en; } if ( $http_accept_language ~* "zh|zh-CN" ) { set $language zh; } root /data/$language; } }

return-----------------------------------

return 返回数据

1.返回code字符串

2.返回code 的状态码

3.返回url

 

break----------------------------------- 停止本次的操作,跳出循环 server { listen 80; server_name url.oldxu.com; root /code; location / { rewrite /1.html /2.html break; rewrite /2.html /3.html; } location /2.html { rewrite /2.html /a.html; } location /3.html { rewrite /3.html /b.html; } } [root@web01]# echo "1.html" >/code/1.html [root@web01]# echo "2.html" >/code/2.html [root@web01]# echo "3.html" >/code/3.html [root@web01]# echo "a.html" >/code/a.html [root@web01]# echo "b.html" >/code/b.html

 

set if return 状态码 状态码 字符串 状态码 URL 301 302 break 停止后续操作: rewrite

2|0关键字 正则 替代内容 flag标记

 

 

Syntax: rewrite regex replacement [flag]; 跳转 : 重定向: #flag last #本条规则匹配完成后,继续向下匹配新的location URI规则 (开发| 伪静态) break #本条规则匹配完成即终止,不再匹配后面的任何规则 (挂维护页) redirect #返回302临时重定向, 地址栏会显示跳转后的地址 permanent #返回301永久重定向, 地址栏会显示跳转后的地址 中国 url.oldxu.com ---> url.oldxu.com/zh --->中文 english url.oldxu.com ---> url.oldxu.com/cn --->english server { listen 80; server_name url.oldxu.com; root /data; set $language /default; if ( $http_accept_language ~* zh ) { set $language /zh; } if ( $http_accept_language ~* en ) { set $language /en; } if ( $http_accept_language ~* ja ) { set $language /jp; } rewrite ^/$ $language; location / { index index.html; } }

 

######永久维护 server { listen 80; server_name url.oldxu.com; root /data;

 

rewrite ^(.*)$ /wh.png break;

 

set $language /default; if ( $http_accept_language ~* zh ) { set $language /zh; } if ( $http_accept_language ~* en ) { set $language /en; } if ( $http_accept_language ~* ja ) { set $language /jp; } rewrite ^/$ $language; location / { index index.html; }

}

 

######临时维护(jd) #error_page 403 404 500 502 /wh.png; #error_page 403 404 500 502 http://$http_host; error_page 403 404 500 502 @temperror; location @temperror { rewrite ^(.*)$ http://$http_host; }

 

需求: 用户通过手机设备访问url.oldxu.com,跳转至url.oldxu.com/m server { listen 80; server_name url.oldxu.com; root /data; if ($http_user_agent ~* "android|iphone|ipad") { rewrite ^/$ /m; } } 需求: 用户通过手机设备访问url.oldxu.com,跳转至m.oldxu.com server { listen 80; server_name url.oldxu.com; root /data; if ($http_user_agent ~* "android|iphone|ipad") { rewrite ^/$ http://m.oldxu.com; } } server { listen 80; server_name m.oldxu.com; root /data/m; location / { index index.html; } }

 

#需求: 用户访问oldxu.com/test,跳转至https://xuliangwei.com location------------------------------------------------------------------ location /test { #rewrite ^(.*)$ https://www.xuliangwei.com/; return 302 https://www.xuliangwei.com/; } if ------------------------------------------------------------------------ server { listen 80; server_name url.oldxu.com; root /data; ​ if ($request_uri ~* "^/test") { ​ #rewrite ^(.*)$ https://www.xuliangwei.com/; ​ return 302 https://www.xuliangwei.com/; ​ } ​ location / { ​ index index.html; ​ } }

3.rewrite场景示例: 开发

 

需求: 用户访问course-11-22-33.html实际上真实访问是/course/11/22/33/course_33.html [root@web01 conf.d]# cat url.oldxu.com.conf server { listen 80; server_name url.oldxu.com; root /data; location / { index index.html; #用户访问的url #文件真实位置 rewrite ^/(.*)-(.*)-(.*)-(.*).html /$1/$2/$3/$4/$1_$4.html; } }


flag
1.动静分离?
2.单台动静分离?
3.集群动静分离?
4.Rewrite
set
if
return URL跳转 运维
rewrite 改写URL 开发
flag:
redirect
permanent
last
break

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值