03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置
Nginx具体应用
部署静态资源
Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源
- 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件
- 将静态资源部署到Nginx非常简单,只需要将静态资源文件放到到Nginx安装目录下的html目录中就可以正常访问
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server {# 监听80端口listen 80; # 服务器的IP地址(域名)server_name localhost; # 处理80端口的location块,用来匹配客户端请求的url,匹配到后去根目录找对应的文件location / {# 指定静态资源的根目录,默认当前目录是配置文件所在的conf目录,html目录和conf目录同级root html;# 指定默认访问的首页(可以指定多个,中间用空格隔开,以";"结尾),默认当前目录是我们指定的根目录index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
正向/反向代理
正向代理: 为了从目标服务器取得内容, 客户端向代理服务器发送一个请求并指定目标服务器的地址,然后代理将请求转发给目标服务器并将获得的内容返回给客户端
- 正向代理是给客户端设置代理服务器,客户端知道代理服务器的存在, 通过代理服务器转发请求最终访问到目标服务器
- 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径即通过代理访问无法访问的资源
反向代理: 用户直接访问反向代理服务器就可以获得目标服务器的资源(用户不需要指定目标服务器的地址), 反向代理服务器负责将请求转发给目标服务器
- 反向代理服务器也是位于用户与目标服务器之间,但却是给服务端设置代理服务器(用户不知道它的存在),用户以为自己访问的就是目标服务器
正向代理和反向代理的区别
正向代理隐藏的是用户
: 原始服务器接收的是代理服务器的请求,用户知道可以通过代理服务器访问无法访问的资源(帮助客户端访问目标服务器)反向代理隐藏的是服务器
: 用户以为自己访问的是目标服务器,其实自己访问的资源是通过反向代理服务器转发的(帮助目标服务器统一处理请求)
负载均衡
随着业务流量越来越大并且业务逻辑也越来越复杂, 单台服务器的性能及单点故障问题就凸显出来了, 因此需要多台服务器组成应用集群进行性能的水平扩展
- 应用集群: 将同一应用部署到多台机器上组成应用集群,集群接收
负载均衡器
分发的请求进行业务处理并返回响应数据 - 负载均衡器: 将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理,既保证服务的可用性又保证响应足够快
- 注意: Nginx是在服务端实现负载均衡,在SpringCloud的客户端我们也可以实现负载均衡
负载均衡的规则
名称 | 说明 |
---|---|
轮询(默认方式) | 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器挂掉能自动剔除 |
weight | 权重方式(权重默认为 1,权重越高请求分发机率越高) |
ip_hash | 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器(IP地址固定),可以解决session的问题 |
least_conn | 依据最少连接方式,分发给处理连接少的服务器 |
url_hash | 依据url分配方式,一个固定的url对应的服务器也是固定的 |
fair | 按后端服务器的响应时间来分配请求,响应时间短的服务器优先分配请求 |
# 不指定默认采用轮询的方式实现负载均衡
upstream myserver{server 192.168.77.130:8080;server 192.168.77.130:8081;
}
# 采用权重的方式实现负载均衡
upstream myserver{server 192.168.77.130:8080 weight=10;server 192.168.77.130:8081 weight=5;
}
# 访问ip的hash结果实现负载均衡
upstream myserver{ip_hash;server 192.168.77.130:8080;server 192.168.77.130:8081;}
# 按后端服务器的响应时间实现负载均衡
upstream myserver{server 192.168.77.130:8080;server 192.168.77.130:8081;fair;
}
需求: 浏览器地址栏输入地址http://192.168.17.129/edu/a.html,根据负载均衡效果将请求平均分配到两台tomcat服务器的8080和8081
端口中
- 在服务器的两台tomcat里面webapps目录中创建web
项目edu
,在edu文件夹中创建页面a.html
第一步: 在http块中添加upstream指令
定义一组服务器,新增一个server块采用负载均衡的规则将请求转发到集群中的某一台服务器
第二步: 访问http://192.168.77.130/edu/a.html发现结果在8080和8081两个服务之间切换
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # upstream指令可以定义一组服务器upstream targetServer{# 默认使用轮询的方式实现负载均衡server 192.168.17.129:8080;server 192.168.17.129:8081;}server {# 监听的端口listen 80;# nginx服务的地址server_name localhost;location / {# 添加定义的服务地址,使用定义好的targetServerproxy_pass http://targetServe }}
}
动静分离
Nginx动静分离不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是把动态请求跟静态请求分开
动静分离从目前实现角度来讲大致分为两种
- 第一种方案也是目前主流推崇的方案就是把静态文件独立成单独的域名然后放在独立的服务器上,如使用Nginx服务器处理静态页面,Tomcat服务器处理动态页面
- 第二种方案就是把动态跟静态文件混合在一起发布,通过
nginx
来分开动态请求和静态请求,具体就是通过location指定不同的后缀名实现不同的请求转发
对于不经常变动的资源可以使用Expires
参数给一个资源(请求)设定一个过期时间,这样浏览器每次访问的时候可以走缓存的数据,减少浏览器与服务器之前的请求
- 用户在第一次访问服务器后浏览器中会将请求对应的资源进行缓存,下次访问的时候如果缓存的资源没有过期且服务端对应的资源也没有更新就直接走缓存
- 满足则返回浏览器缓存的数据并返回状态码304,不满足则需要从服务器重新下载数据并返回状态码200
第一步: 在liunx系统中/data
目录下准备静态资源,如www/a.html
和image/1.png
第二步: 在nginx的配置文件的location块
配置要访问的静态资源路径
autoindex on
: 在访问静态资源目录时,能够显示目录里面的内容expire
: 设置缓存过期时间
server {# 监听的端口listen 80;# nginx的服务地址server_name 192.168.77.129;# http://192.168.77.129/www/a.htmllocation /www/ {root /data/;index index.html index.htm;# http://192.168.77.129/image/location /image/ {root /data/;# 显示image目录的内容autoindex on;}
}
反向代理一台服务器
需求: 打开浏览器在浏览器地址栏输入地址www.123.com跳转到liunx系统中tomcat的主页面中
第一步: 在windows系统的host文件进行域名和ip对应关系的配置
192.168.17.129 www.123.com
第二步: 在nginx.conf配置文件中添加proxy_pass
属性进行请求转发的配置(反向代理配置)
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 在http块中新增一个server块,用来将请求转发server {# 监听80端口listen 80;server_name 192.168.17.129;location / {# 反向代理配置,将请求转发到目标服务器proxy_pass http://127.0.0.1:8080; }}
}
反向代理多台服务器
使用nginx反向代理(nginx监听端口为9001),根据访问的路径跳转到不同端口的服务中,注意放行8080/8081/9001
对外访问的端口
第一步: 准备两个文件夹安装两个tomcat服务器,修改服务器的conf/erver.xml
配置文件,修改它们的端口号防止冲突
<Server port ="8015" shutdown="SHYTDOWN" >
<Connector port="8080" protocol="HTTP/1.1">
<Connector port="8019" protocol="AJP/1.3">
第二步: 在两个Tomcat的webapps目录下分布创建web项目edu和vod
并存放对应的测试文件a.html
<!--edu/a.html-->
<h1>8080<h1>
<!--vod/a.html-->
<h1>8081<h1>
第三步: 在http块中添加一个新的server块并添加两个location块
- 访问http://192.168.17.129:9001/edu/a.html直接跳转到http://127.0.0.1:8080/edu/a.html
- 访问http://192.168.17.129:9001/vod/a.html直接跳转到http://127.0.0.1:8080/vod/a.html
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 在http块中新增一个server块,用来将请求转发server {# 监听9001端口listen 9001;server_name 192.168.17.129;location ~ /edu/ {# 反向代理配置,将请求转发到目标服务器proxy_pass http://127.0.0.1:8080; }location ~ /vod/ {# 反向代理配置,将请求转发到目标服务器proxy_pass http://127.0.0.1:8081; }}
}
配置高可用
相关文章:

03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置
Nginx具体应用 部署静态资源 Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件将静态资源部署到Ngin…...

刷题笔记24——完全二叉树的节点个数
有些事情是不能告诉别人的,有些事情是不必告诉别人的,有些事情是根本没有办法告诉别人的,而且有些事情是,即使告诉了别人,你也会马上后悔的。——罗曼罗兰 222. 完全二叉树的节点个数 java的幂运算要 (int) Math.pow(2,l1)-1计算满二叉树的节点数量公式:2 ^ height…...

sentinel环境搭建以及微服务接入
• sentinel部署 • sentinel-镜像制造 • sentinel-镜像推送 • sentinel-部署配置文件 • 访问控制台 • 外网访问控制台 • 集群内访问 • 配置规则 • 限流效果 • 微服务接入 • pom文件引入依赖 • pod部署文件添加配置 Sentinel 控制台是流量控制、熔断降级规则统一配置…...
Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks
标题:Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks 作者:Pan Zhang,Chengyu Song,Heng Yin,Deqing Zou,Elaine Shi and Hai Jin 发布:ASPLOS【计算机体系结构顶会】 时间:2020 摘要 Intel Soft…...

阿里云无影云电脑角色AliyunServiceRoleForGws什么意思?
阿里云无影云电脑服务关联角色是指角色名称:AliyunServiceRoleForGws,并赋予角色权限策略:AliyunServiceRolePolicyForGws的过程,简单来说,就是允许无影云电脑服务访问您VPC、CEN和NAS中的资源,使用该权限查…...

操作系统--------调度算法篇
目录 一.先来先服务调度算法(FCFS) 二.短作业优先调度算法(SJF) 2.1.SJF调度算法缺点 三.优先级调度算法 3.1优先级调度算法的类型 1.非抢占优先级调度算法 2.抢占优先级调度算法 3.2优先级的类型 3.1静态优先级 3.2动态…...
宝塔composer 安装laravel依赖出现的问题
环境宝塔、PHP版本8.0.2、laravel9 问题1:PHP Fatal error: Uncaught Error: Call to undefined function Composer\XdebugHandler\putenv() 办法:把PHP版本disable_functions这个中的putenv去掉,这个意思就是putenv被PHP对应的版本禁用了&…...
OpenCV自学笔记二十四:支持向量机
在OpenCV中,支持向量机(Support Vector Machine,简称SVM)算法的实现包含在ml模块中。SVM是一种常用的监督学习算法,主要用于分类问题。 SVM的原理:通过在特征空间中找到一个最优超平面,将不同类…...

网络初识
一 IP 地址 概念: IP 地址主要用于表示网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址 格式 IP 地址是一个32为的二进制数,通常被分割为4个“8位二进制数“(也就是4个字节&…...
极坐标和直角坐标的雅克比矩阵推导
我们经常需要在一些问题中研究坐标系的关系,这里讲讲最常见的极坐标和直角坐标的雅克比矩阵的推导。以二维坐标为例,三维坐标也是同理。 1. 直角坐标和极坐标 直角坐标表示为 ( x , y ) (x,y) (x,y),极坐标表示为 ( ρ , φ ) (\rho,\varph…...
经管博士科研基础【25】概率论中的相关基础概念
1. Support 在概率论中,"support"(支撑集)是指随机变量可能取值的集合。对于离散型随机变量,支撑集包含了所有可能的取值;而对于连续型随机变量,支撑集是指其密度函数或概率质量函数非零的区域。…...
计算机网络的相关知识点总结(一)
1.谈一谈对OSI七层模型和TCP/IP四层模型的理解? 不管是OSI七层模型亦或是TCP/IP四层模型,它们的提出都有一个共同的目的:通过分层来将复杂问题细化,通过各个层级之间的相互配合来更好的解决计算机中出现的问题。 说到分层…...

下载github.com上的依赖资源
下载github.com上的依赖资源(需要反复试才能成功,所以单独安装) export GIT_TRACE1 export GIT_CURL_VERBOSE1 pip install githttps://github.com/PanQiWei/AutoGPTQ.git -i https://pypi.mirrors.ustc.edu.cn/simple --trusted-hostpypi.mi…...
编写 GPT 提示词的公式 + 资源分享
GPT 能够给我们带来很大的帮助,因此我们要好好利用它。我们希望 GPT 输出令我们满意的内容,影响 GPT 输出内容的因素有模型和输入(Prompt,提示词)。 模型:我们可以选择不同的 GPT 产品,它们的模…...

用HTML、CSS和JavaScript制作的通用进制转换器
随着编程和计算机科学越来越受欢迎,我们经常需要进行进制转换。本文将介绍一个简洁、美观、适用于移动设备的进制转换工具,并详细讨论其实现。 目录 🌍 用HTML、CSS和JavaScript制作的通用进制转换器 1.项目图片展示 2. 技术栈 3. 主要功…...

ArcGIS 10.3软件安装包下载及安装教程!
【软件名称】:ArcGIS 10.3 【安装环境】:Windows 【下载链接 】: 链接:https://pan.baidu.com/s/1K5ab7IHMYa23HpmuPkFa1A 提取码:oxbb 复制这段内容后打开百度网盘手机App,操作更方便哦 软件解压码点击原文…...

【数据增强】
【数据增强】 1 数据增强的情形2 数据增强的方法 1 数据增强的情形 当数据比较小,难以获取新的训练数据时,可以考虑数据增强,如随机裁剪部分,随机左右上下翻转、随机旋转一个角度、随机亮度变化等微小变化,数据的多样…...

Ae 效果:CC Force Motion Blur
时间/CC Force Motion Blur Time/CC Force Motion Blur CC Force Motion Blur (CC 强制运动模糊)主要用于为动态图像添加强制的运动模糊效果,增加动态画面的流畅感和真实感。 相对于时间轴面板上的“运动模糊”开关,CC Force Moti…...

2023华为杯研究生数学建模竞赛CDEF题思路+模型代码
全程更新华为杯研赛CDEF题思路模型及代码,大家查看文末名片获取 华为杯C题思路分析 问题一 在每个评审阶段,作品通常都是随机分发的,每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性,不同专家评审的作…...
FP独立站之黑科技:AB站收款、斗篷CLOAK
最近一段时间经常有不少小伙伴来咨询我独立站的相关的业务,因为很多独立站卖家觉得独立站不好做,再加上跨境平台禁止特货类产品的销售(如FP产品、成人用品、电子烟、灰黑类产品等等),但这类产品市场需求大,…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...