Nginx实现动静分离
时间:2021-08-07
本文章向大家介绍Nginx实现动静分离,主要包括Nginx实现动静分离使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Nginx实现动静分离
Nginx动静分离概述
动静分离,通过中间件将动态请求和静态请求进行分离;
通过中间件将动态请求和静态请求分离,可以建上不必要的请求消耗,同事能减少请求的延时。
通过中间件将动态请求和静态请求分离,逻辑图如下:
动静分离只有好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响。
动静分离实践
环境准备
主机名 | 角色 | 软件 | 外网IP | 内网IP |
---|---|---|---|---|
lb01 | 负载均衡 | nginx | 10.0.0.5 | 172.16.1.5 |
web01 | 静态资源网站 | nginx | 10.0.0.7 | 172.16.1.7 |
web02 | 动态资源网站 | nginx | 10.0.0.8 | 172.16.1.8 |
静态网站配置
# 1.修改nginx配置文件
[root@web01 /zy/pc]# vim /etc/nginx/conf.d/jing.conf
server {
listen 80;
server_name www.dj.com;
location / {
root /dj;
index index.html;
}
location ~* \.(jpg|jpeg|gif|mp4|mp3|avi|png)$ {
root /dj/static;
}
location ~ \.jsp {
proxy_pass http://10.0.0.8:8080;
proxy_set_header Host $http_host;
}
}
[root@web01 /zy/pc]# vim /etc/nginx/conf.d/jing.conf
server {
listen 80;
server_name www.dj.com;
location / {
root /dj;
index index.html;
}
location ~* \.(jpg|jpeg|gif|mp4|mp3|avi|png)$ {
root /dj/static;
}
location ~ \.jsp {
proxy_pass http://10.0.0.8:8080;
proxy_set_header Host $http_host;
}
}
# 2.创建一个静态页面
[root@web01 ~]# mkdir /dj
[root@web01 ~]# echo 'tangzong lsp' > /dj/index.html
# 3.创建静态资源目录
[root@web01 ~]# mkdir /dj/static
# 4.放入静态资源,视屏...图片...
[root@web01 /dj/static]# ll
-rw-r--r-- 1 root root 149503 Jul 7 17:14 1.jpg
# 5.打开浏览器访问http:/www.dj.com
动态网站配置
# 1.安装tomcat
[root@web02 ~]# yum install -y tomcat
# 2.创建默认站点目录
/usr/share/tomcat/webapps
[root@web02 ~]# mkdir /usr/share/tomcat/webapps/ROOT
# 3.部署java代码
[root@web02 ~]# vi /usr/share/tomcat/webapps/ROOT/dong.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>曾老湿JSP Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>曾老湿随机数:<h1>");
out.println(rand.nextInt(99)+100);
%>
</BODY>
</HTML>
# 4.重启tomcat
[root@web02 ~]# systemctl restart tomcat
# 5.在浏览器里访问http://10.0.0.8:8080/dong.jsp
实现动静分离
[root@web01 /dj]# vim /etc/nginx/conf.d/jing.conf
server {
listen 80;
server_name www.dj.com;
location / {
root /dj;
index index.html;
}
location ~* \.(jpg|jpeg|gif|mp4|mp3|avi|png)$ {
root /dj/static;
}
location ~ \.jsp {
proxy_pass http://10.0.0.8:8080;
proxy_set_header Host $http_host;
}
}
# 修改代码
[root@web01 /dj]# vim index.html
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>曾老湿测试ajax和跨域访问</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://www.dj.com/dong.jsp",
success: function(data){
$("#get_data").html(data)
},
error: function() {
alert("哎呦喂,失败了,回去检查你服务去~");
}
});
});
</script>
<body>
<h1>曾老湿带你测试动静分离</h1>
<img src="http://www.dj.com/1.jpg">
<div id="get_data"></div>
</body>
</html>
Nginx资源分离
配置资源分离页面
[root@web01 /dj]# vim /etc/nginx/conf.d/zy.conf
server {
listen 9000;
location / {
root /zy/android;
index index.html;
}
}
server {
listen 9001;
location / {
root /zy/iphone;
index index.html;
}
}
server {
listen 9002;
location / {
root /zy/pc;
index index.html;
}
}
# 创建站点目录
[root@web01 dj]# mkdir /zy/{android,iphone,pc} -p
# 这个步骤是开发的活(写不同资源的前端页面)
[root@web01 dj]# echo 'anzhuo' > /zy/android/index.html
[root@web01 dj]# echo 'iphone' > /zy/iphone/index.html
[root@web01 dj]# echo 'pc' > /zy/pc/index.html
资源分离
[root@lb01 ~]# vim /etc/nginx/conf.d/zy.conf
upstream android {
server 172.16.1.7:9000;
# server 172.16.1.8:9000;
}
upstream iphone {
server 172.16.1.7:9001;
}
upstream pc {
server 172.16.1.7:9002;
}
server {
listen 80;
server_name www.zy.com;
location / {
if ($http_user_agent ~* "Android") {
proxy_pass http://android;
}
if ($http_user_agent ~* "Iphone") {
proxy_pass http://iphone;
}
if ($http_user_agent ~* "MSIE") {
return 403;
}
proxy_pass http://pc;
}
}
原文地址:https://www.cnblogs.com/dsryyds/p/15111545.html
- Serverless 应用开发指南:基于 Serverless 与 Lambda 的微信公共平台
- Serverless 应用开发指南:serverless 的 hello, world
- 通过一组RESTful API暴露CQRS系统功能
- 通过使用结构化数据 JSON-LD,我为网站带来了更多的流量
- 使用 OWIN Self-Host ASP.NET Web API 2
- c#开源消息队列中间件EQueue 教程
- Serverless 框架 OpenWhisk 开发指南:使用 Node.js 编写 hello, world
- GOTO Berlin: Web API设计原则
- 使用 ServiceStack 构建跨平台 Web 服务
- 使用 OpenWhisk 自建 Serverless 服务
- 如何在 8 小时内开发上线一个在线表单系统
- 让Response.Redirect页面重定向更有效率
- 使用 adr 轻松创建 “程序员友好” 的轻量级文档
- 在Linux和Windows平台上操作MemoryMappedFile(简称MMF)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java API 连接 Hbase示例
- 点线图和阶梯图的画法
- 添加直线的两种方式
- nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
- Chrome代码调试指南
- Maven安装与配置
- CentOS7安装elk,并监控Nginx的access.log日志
- Aria2 + Rclone 实现离线下载 | 完美脚本配置 | 解决无法上传问题
- alpine使用的避坑指南
- elasticSearch学习(八)
- Python自学成才之路 魔术方法之比较运算符,赋值运算符
- Go语言(golang)新发布的1.13中的Error Wrapping深度分析
- 使用k8s容器钩子触发事件
- Python自学成才之路 魔术方法之属性访问控制
- Python自学成才之路 彻底搞懂python变量作用域