一 动静分离概述

1.1 动静分离介绍

为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。即动态文件与静态文件的分离。

1.2 动静分离原理

动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。通常将静态资源放到nginx中,动态资源转发到tomcat服务器中。

二 动静分离实现--根据文件后缀

2.1 环境准备



主机

IP

角色

备注

nginx01

172.24.10.21

Nginx Proxy主机

接受请求,并代理至后端css存储点

nginx02

172.24.10.22

Nginx 静态服务器

处理静态请求

nginx03

172.24.10.23

Nginx 动态服务器

处理动态请求

本实验动静分离主要是通过nginx+tomcat来实现,其中nginx01进行前端代理,同时本地处理css静态文件,nginx02处理图片、html、JS等静态文件,tomcat处理jsp、servlet等动态请求。

2.2 创建静态站点

  1 [root@nginx02 ~]# mkdir /usr/share/nginx/staticrs/
2 [root@nginx02 ~]# echo '<h1>Static_Web</h1>' > /usr/share/nginx/staticrs/index.html
3 [root@nginx02 ~]# ll /usr/share/nginx/staticrs/ #上传示例图片静态资源
4 total 16K
5 -rw-r--r-- 1 root root 20 Jun 20 14:32 index.html
6 -rw-r--r-- 1 root root 11K Jun 20 14:35 nginx.jpg
7 [root@nginx02 ~]# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
  1 [root@nginx02 ~]# vi /etc/nginx/conf.d/staticrs.conf
2 server {
3 listen 80;
4 server_name staticrs.linuxds.com;
5 access_log /var/log/nginx/staticrs.access.log main;
6 error_log /var/log/nginx/staticrs.error.log warn;
7 location / {
8 root /usr/share/nginx/staticrs;
9 index index.html;
10 }
11 }
  1 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
2 [root@nginx02 ~]# nginx -s reload #重载配置文件
手动访问后端静态站点及资源:http://staticrs.linuxds.com/及http://staticrs.linuxds.com/nginx.jpg。

2.3 创建动态站点

  1 [root@nginx03 ~]# yum install -y tomcat
2 [root@nginx03 ~]# mkdir -p /usr/share/tomcat/webapps/ROOT
  1 [root@nginx03 ~]# vi /usr/share/tomcat/webapps/ROOT/javatest.jsp	#构建动态测试页面
2 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
3 <HTML>
4 <HEAD>
5 <TITLE>JSP Test Page</TITLE>
6 </HEAD>
7
8 <BODY>
9 <%
10 Random rand = new Random();
11 out.println("<h1>随机数:<h1>");
12 out.println(rand.nextInt(99)+100);
13 %>
14 </BODY>
15 </HTML>
  1 [root@nginx03 ~]# systemctl start tomcat.service	#启动tomcat
手动访问后端动态站点及资源:http://dynamic.linuxds.com:8080/javatest.jsp

2.4 配置前端动静分离

  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/dss
2 [root@nginx01 ~]# ll /usr/share/nginx/dss/
3 total 4.0K
4 -rw-r--r-- 1 root root 1.9K Jun 20 18:10 test.css #模拟css
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/dss.conf		#配置Dynamic-Static Separation
2 upstream static_server {
3 server 172.24.10.22;
4 }
5 upstream tomcat_server {
6 server 172.24.10.23:8080;
7 }
8
9 server {
10 listen 80;
11 server_name dss.linuxds.com;
12 access_log /var/log/nginx/dss.access.log main;
13 error_log /var/log/nginx/dss.error.log warn;
14 proxy_set_header X-Real-IP $remote_addr;
15 proxy_set_header Host $host;
16 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17 proxy_set_header X-Forwarded-Proto $scheme;
18 # location / {
19 # root html;
20 # index index.html;
21 # }
22 location / {
23 proxy_pass http://static_server;
24 }
25 location ~ .*\.(css)$ {
26 root /usr/share/nginx/dss;
27 }
28 location ~ .*\.(htm|html|gif|jpg|jpeg|png|gif|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma) {
29 proxy_pass http://static_server;
30 expires 5d;
31 }
32 location ~ .*\.jsp$ {
33 proxy_pass http://tomcat_server;
34 expires 1h;
35 }
36 error_page 500 502 503 504 /50x.html;
37 location = /50x.html {
38 root html;
39 }
40 }
  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#检查配置文件
2 [root@nginx01 ~]# nginx -s reload #重载配置文件

2.5 访问测试

浏览器分别访问:http://dss.linuxds.com/,http://dss.linuxds.com/javatest.jsp,http://staticrs.linuxds.com/nginx.jpg,http://dss.linuxds.com/test.css。

三 动静分离实现--根据文件后缀

3.1 环境准备

参考2.1.

3.2 创建静态站点

  1 [root@nginx02 ~]# vi /etc/nginx/conf.d/staticrs.conf
2 server {
3 listen 80;
4 server_name staticrs.linuxds.com;
5 access_log /var/log/nginx/staticrs.access.log main;
6 error_log /var/log/nginx/staticrs.error.log warn;
7 location /static {
8 alias /usr/share/nginx/staticrs;
9 index index.html;
10 }
11 }
手动访问后端静态站点及资源:http://staticrs.linuxds.com/static/及http://staticrs.linuxds.com/static/nginx.jpg。

3.3 创建动态站点

  1 [root@nginx03 ~]# yum install -y tomcat
2 [root@nginx03 ~]# mkdir -p /usr/share/tomcat/webapps/ROOT/dynamic
  1 [root@nginx03 ~]# vi /usr/share/tomcat/webapps/ROOT/dynamic/javatest.jsp
2 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
3 <HTML>
4 <HEAD>
5 <TITLE>JSP Test Page</TITLE>
6 </HEAD>
7
8 <BODY>
9 <%
10 Random rand = new Random();
11 out.println("<h1>随机数:<h1>");
12 out.println(rand.nextInt(99)+100);
13 %>
14 </BODY>
15 </HTML>
手动访问后端动态站点及资源:http://dynamic.linuxds.com:8080/dynamic/javatest.jsp

3.4 配置前端动静分离

  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/dss
2 [root@nginx01 ~]# ll /usr/share/nginx/dss/
3 total 4.0K
  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/dss.conf		#配置Dynamic-Static Separation
2 upstream static_server {
3 server 172.24.10.22;
4 }
5 upstream tomcat_server {
6 server 172.24.10.23:8080;
7 }
8
9 server {
10 listen 80;
11 server_name dss.linuxds.com;
12 access_log /var/log/nginx/dss.access.log main;
13 error_log /var/log/nginx/dss.error.log warn;
14 proxy_set_header X-Real-IP $remote_addr;
15 proxy_set_header Host $host;
16 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17 proxy_set_header X-Forwarded-Proto $scheme;
18 # location / {
19 # root html;
20 # index index.html;
21 # }
22 location / {
23 proxy_pass http://static_server;
24 }
25 location ~ .*\.(css)$ {
26 root /usr/share/nginx/dss;
27 }
28 location /static/ {
29 proxy_pass http://static_server;
30 expires 5d;
31 }
32 location /dynamic/ {
33 proxy_pass http://tomcat_server;
34 expires 1h;
35 }
36 error_page 500 502 503 504 /50x.html;
37 location = /50x.html {
38 root html;
39 }
40 }

3.5 访问测试

浏览器分别访问:http://dss.linuxds.com/,http://dss.linuxds.com/dynamic/javatest.jsp,http://staticrs.linuxds.com/static/nginx.jpg,http://dss.linuxds.com/test.css。
参考:https://klionsec.github.io/2017/12/21/nginx-static-dynamic/。

013.Nginx动静分离的更多相关文章

  1. Nginx动静分离经典

    Nginx:安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等]把所需的包下载到/usr/src下[根据自己的习惯,路径可以改变]1.首先安装pcre: cd /usr/s ...

  2. Nginx动静分离实现

    Nginx动静分离实现: Nginx是一种轻量级,高性能,多进程的Web服务器,非常适合作为静态资源的服务器使用,而动态的访问操作可以使用稳定的Apache.Tomcat及IIS等来实现,这里就以Ng ...

  3. Nginx动静分离架构

    Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...

  4. Nginx 动静分离与负载均衡的实现

    一.前提 企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题. 问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我们对于网站环 ...

  5. Nginx动静分离

    动静分离 Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路. ...

  6. Nginx动静分离架构&&HA-LB集群整合

    Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...

  7. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  8. Nginx动静分离知识及配置

    Nginx动静分离知识及配置,本质上与分离上传下载功能是相同功能,本质就是在文件服务器也是需要部署WEB应用的,只是在进行代理分离的时候分配到对应的文件服务器上去. 随着Nginx高性能Web服务器大 ...

  9. Nginx动静分离(Nginx+Tomcat)

    第一步:nginx构建 第二步:Tomcat构建 1.Tomcat基础点 (1)Tomcat 是基于java开发的web容器,用来发布java代码和jsp网页. (2)开发人员开发java web网站 ...

随机推荐

  1. PHP丨PHP基础知识之流程控制for循环「理论篇」

    今天公司同事在看for循环,那么我们今天就来讲讲for循环吧! for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体 ...

  2. npm设置为淘宝镜像地址

    1. npm设置为淘宝镜像 $npm config set registry https://registry.npm.taobao.org 2. 检查一下 $npm config get regis ...

  3. maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的.每个显式声明的类包都会依赖于一些其它的隐式类包, ...

  4. nginx web服务器概念了解 配置

    服务器 服务器 服务器是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性. 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能 ...

  5. spring bean post processor

    相关文章 Spring 整体架构 编译Spring5.2.0源码 Spring-资源加载 Spring 容器的初始化 Spring-AliasRegistry Spring 获取单例流程(一) Spr ...

  6. JavaScript动画实例:递归分形图动态展示

    在“JavaScript图形实例:SierPinski三角形” 和“JavaScript图形实例:Levy曲线及其变形”等文章中我们介绍了通过递归生成分形图形的方法.我们可以将绘制的分形图形每隔一定的 ...

  7. Java并发编程(06):Lock机制下API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Lock体系结构 1.基础接口简介 Lock加锁相关结构中涉及两个使用广泛的基础API:ReentrantLock类和Condition接 ...

  8. 01-springboot整合elasticsearch初识

    1.elasticsearch 1.es简介      Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elas ...

  9. JS中同步和异步

    首先,我们要知道,JavaScript的本质是一门浏览器脚本语言,在执行的时候是一行一行的执行,只有前面的代码执行完了才会执行后面的代码.JS是单线程语言指的就是这个意思. 同步和异步其实在进行任务执 ...

  10. PE文件格式详解(一)

    PE文件格式介绍(一) 0x00 前言 PE文件是portable File Format(可移植文件)的简写,我们比较熟悉的DLL和exe文件都是PE文件.了解PE文件格式有助于加深对操作系统的理解 ...