Nginx动静分离和资源分离
Nginx实现动静分离
动静分离,通过中间件将动静分离和静态请求进行分离; 通过中间件将动态请求和静态请求分离,可以建上不必要的请求消耗,同事能减少请求的延时。 通过中间件将动态请求和静态请求分离,逻辑图如下:
好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响。
部署静态网页
#编写配置文件
[root@web02 code]# vim /etc/nginx/conf.d/4.conf
server{
listen 80;
server_name pic.xxx.com;
root /code;
index index.html;
location ~*.*\.(jpg|png|git)$ {
root /code/images;
}
}
#创建站点目录
[root@web02 code]# mkdir /code/images
#准备索引文件
[root@web02 code]# echo '这里是前端页面' > /code/index.html
[root@web02 code]# cat /code/index.html
这里是前端页面
#检查
[root@web02 code]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#写入本地DNS域名解析
10.0.0.8 pic.xxx.com
#设置格式utf-8
[root@web02 code]# vim /etc/nginx/conf.d/4.conf
server{
listen 80;
server_name pic.xxx.com;
root /code;
index index.html;
charset utf-8;
location ~*.*\.(jpg|png|git)$ {
root /code/images;
}
}
#准备一个图片
# 将图片移动只站点目录
mv 1.png /code/images/
# 浏览器访问
http://pic.xxx.com/1.png
部署动态网页
tomcat ------ jdk
java的容器
java代码比喻是水
tomcat就是java的水的容器
C语言 GCC
jdk java的环境
# 安装java环境 openjdk
[root@web02 code]# yum install -y tomcat
# 启动tomcat
[root@web02 ~]# systemctl start tomcat
# 检查端口
[root@web02 ~]# netstat -lntup | grep 8080
# tomcat的站点目录
/usr/share/tomcat/webapps
# 部署后端代码 需要在站点目录地下创建一个名为ROOT的目录
# 将代码放入ROOT目录下
mkdir /usr/share/tomcat/webapps/ROOT
# 将代码放入站点目录下
[root@web02 images]# vim /usr/share/tomcat/webapps/ROOT/test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>带你测智商 Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>你的智商:<h1>");
out.println(rand.nextInt(99)+100);
%>
</BODY>
</HTML>
# 重启tomcat
systemctl restart tomcat
# 浏览器访问
10.0.0.8:8080/test.jsp
在代理上面整合资源
# 安装nginx
yum install -y nginx
# 整合资源配置文件
[root@lb01 ~]# vim /etc/nginx/conf.d/zh.conf
upstream static {
server 172.16.1.8:80;
}
upstream java {
server 172.16.1.8:8080;
}
server {
listen 80;
server_name pic.xxx.com;
location ~* \.(jpg|png|gif)$ {
proxy_pass http://static;
proxy_set_header Host $http_host;
}
location ~ \.jsp {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
# 检测语法
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 本地DNS解析
10.0.0.5 pic.xxx.com
#
pic.xxx.com/1.png
http://pic.xxx.com/test.jsp
整合资源
upstream static {
server 172.16.1.7:80;
}
upstream java {
server 172.16.1.8:8080;
}
server {
listen 80;
server_name pic.xxx.com;
location / {
root /code;
index index.html;
}
location ~* \.(jpg|png|gif)$ {
proxy_pass http://static;
proxy_set_header Host $http_host;
}
location ~ \.jsp {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
mkdir -p /code
vim /code/index.html
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>跨域访问</title>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET",
url: "http://pic.xxx.com/test.jsp",
success: function(data){
$("#get_data").html(data)
},
error: function() {
alert("哎呦喂,失败了,回去检查你服务去~");
}
});
});
</script>
<body>
<h1>曾老湿带你测试动静分离</h1>
<img src="http://pic.xxx.com/1.png">
<div id="get_data"></div>
</body>
</html>
Nginx实现资源分离
要用三台web和一个代理
web端配置
#web01
[root@web01 conf.d]# vim pc.conf
server{
listen 80;
server_name pc.com;
root /code/pc;
charset utf-8;
index index.html;
}
#创建站点目录和编译文本文件
[root@web01 conf.d]# mkdir -p /code/pc
[root@web01 conf.d]# echo '我是PC' > /code/pc/index.html
#检查成功并重启
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
#写入本地DNS域名解析
#web02
[root@web02 conf.d]# vim ios.conf
server{
listen 80;
server_name ios.com;
root /code/ios;
charset utf-8;
index index.html;
}
#创建站点目录和编译文本文件
[root@web02 conf.d]# mkdir -p /code/ios
[root@web02 conf.d]# echo '我是ios' > /code/ios/index.html
#检查成功并重启
[root@web02 conf.d]# nginx -t
[root@web02 conf.d]# systemctl restart nginx
#写入本地DNS域名解析
#web03
[root@lb01 conf.d]# vim az.conf
server{
listen 80;
server_name az.com;
root /code/az;
charset utf-8;
index index.html;
}
#创建站点目录和编译文本文件
[root@web03 conf.d]# mkdir -p /code/az
[root@web03 conf.d]# echo '我是安卓' > /code/az/index.html
#检查成功并重启
[root@web03 conf.d]# nginx -t
[root@web03 conf.d]# systemctl restart nginx
#写入本地DNS域名解析
配置代理
#lb02
[root@lb02 ~]# vim /etc/nginx/conf.d/jq.conf
upstream pc{
server 172.16.1.7:80;
}
upstream andriod{
server 172.16.1.5:80;
}
upstream ios{
server 172.16.1.8:80;
}
server{
listen 80;
server_name jq.com;
location /{
if ($http_user_agent ~* "Android") {
proxy_pass http://andriod;
}
if ($http_user_agent ~* "Iphone") {
proxy_pass http://ios;
}
proxy_pass http://pc;
}
}
#检查成功并重启
[root@lb02 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb02 ~]# systemctl restart nginx
#写入本地DNS域名解析