# Nginx 代理 - 动静分离

# 1. 动静分离基本介绍

# 1.1 什么是动静分离

简单来说就是将动态请求和静态请求分开处理。

# 1.2 为何需要动静分离
  • 首先 Tomcat 应用服务器在处理静态资源时效率不高,但默认情况下无论 “动态、静态 “ 资源都是由 tomcat 处理,而 Tomcat 在处理静态资源时需要进行逻辑运算,从而会导致应用响应慢,并且会占用不必要的系统资源。
  • 那么借助 Nginx 实现动态资源请求和静态资源请求分离后,可以减少系统不必要的消耗和延时。以便加快系统的处理性能。
# 1.3 如何实现动静分离

Nginx 通过用户请求的 uri 来区分请求的类型,并转发给不同的服务端。

  • 如果请求的 uri 包含 png、jpg 等资源则由 Nginx 处理;
  • 如果请求的 uri 包含 php、jsp 等资源则代理至 Tomcat 处理;

1.png

# **2.** 单机动静分离实践

单机实现动静分离 nginx + Tomcat

# 2.1 Tomcat 配置
[root@web01 ~]# wget https://download.oracle.com/otn/java/jdk/8u461-b11/68ce765258164726922591683c51982c/jdk-8u461-linux-x64.tar.gz
[root@web01 ~]# tar xf jdk-8u461-linux-x64.tar.gz -C /usr/local
[root@web01 ~]# ln -s /usr/local/jdk1.8.0_461/ /usr/local/jdk
#添加环境变量
[root@web01 ~]# cat /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@web01 ~]# source /etc/profile
[root@web01 ~]# java -version
[root@web01 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-9.0.108.tar.gz
[root@web01 ~]# mkdir /soft
[root@web01 ~]# tar xf apache-tomcat-9.0.52.tar.gz -C /soft/
[root@web01 ~]# ln -s /soft/apache-tomcat-9.0.108/ /soft/tomcat
[root@web01 ~]# /soft/tomcat/bin/startup.sh
# 2.2 Nginx 配置
[root@lb01 conf.d]# cat java.hmallleasing.com.conf 
server {
	listen 80;
	server_name java.hmallleasing.com;
	
	#处理动态请求
	location / {
		proxy_pass http://192.168.1.7:8080;
		include proxy_params;
	}
	#如果匹配到.png .jpg 这样的后缀,则让其通过 Nginx 读取本地 /code/images 下的资源文件	
	location ~* \.(png|jpg|svg|ioc)$ {
		root /code/images;
		expires 30d;
	}
}
[root@lb01 yum.repos.d]# cat /etc/nginx/proxy_params
#启用长连接
proxy_http_version 1.1;
proxy_set_header Connectin "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 120;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_temp_file_write_size 10240k;
proxy_max_temp_file_size 10240k;
[root@lb01 yum.repos.d]# nginx -t
[root@lb01 yum.repos.d]# systemctl reload nginx

# 3. 集群动静分离实践

通过 nginx 负载均衡将动态请求和静态请求进行分离,基于用户请求 URI 实现路由功能;

2.png

# 3.1 环境准备
系统服务角色地址
CentOS7.6负载均衡Nginx Proxy10.0.0.5
CentOS7.6动态资源Tomcat Server10.0.0.7
CentOS7.6静态资源Nginx Static10.0.0.8
# 3.2 配置静态节点
# 在 10.0.0.8 服务器上配置静态资源
[root@web02 ~]# cat /etc/nginx/conf.d/ds.hmallleasing.com.conf
server {
	listen 80;
	server_name ds.hmallleasing.com;
	root /code/images;
	
	location / {
		index index.html;
	}
}
# 准备目录,以及静态相关图片
[root@web02 ~]# mkdir /code/images -p
[root@web02 ~]# wget -O /code/images/nginx.png http://nginx.org/nginx.png
[root@web02 ~]# systemctl reload nginx
# 3.3 配置动态节点
# 在 10.0.0.7 服务器上配置动态资源
[root@web01 ~]# /soft/tomcat/bin/shutdown.sh
[root@web01 ~]# rm -rf /soft/tomcat/webapps/ROOT/*
# 编写 java 配置
[root@web01 ~]# vim /soft/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 ~]# /soft/tomcat/bin/startup.sh
# 3.4 配置负载均衡
# 负载均衡 10.0.0.5 上配置调度,根据不同的 url 调度到不同的服务器
[root@lb01 conf.d]# cat proxy_ds.hmallleasing.com.conf 
upstream java {
	server 192.168.1.7:8080;
}
upstream static {
	server 192.168.1.8:80;
}
server {
	listen 80;
	server_name ds.hmallleasing.com;
	include proxy_params;
	
	location / {
		proxy_pass http://java;
	}
	
	location ~* .*\.(png|jpg)$ {
		proxy_pass http://static;
	}
}
[root@lb01 conf.d]# cat /etc/nginx/proxy_params 
#启用长连接
proxy_http_version 1.1;
proxy_set_header Connectin "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 120;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_temp_file_write_size 10240k;
proxy_max_temp_file_size 10240k;
[root@lb01 conf.d]# systemctl restart nginx
# 3.5 测试集群动静分离

测试效果动静分离效果

1.png

模拟静态资源集群故障。动态内容依旧能正常访问,静态内容则不会被请求到。

2.png

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝