当前位置: 首页 > news >正文

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.htmlimage/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计算满二叉树的节点数量公式&#xff1a;2 ^ height…...

sentinel环境搭建以及微服务接入

• sentinel部署 • sentinel-镜像制造 • sentinel-镜像推送 • sentinel-部署配置文件 • 访问控制台 • 外网访问控制台 • 集群内访问 • 配置规则 • 限流效果 • 微服务接入 • pom文件引入依赖 • pod部署文件添加配置 Sentinel 控制台是流量控制、熔断降级规则统一配置…...

Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks

标题&#xff1a;Klotski: Efficient Obfuscated Execution against Controlled-Channel Attacks 作者&#xff1a;Pan Zhang,Chengyu Song,Heng Yin,Deqing Zou,Elaine Shi and Hai Jin 发布&#xff1a;ASPLOS【计算机体系结构顶会】 时间&#xff1a;2020 摘要 Intel Soft…...

阿里云无影云电脑角色AliyunServiceRoleForGws什么意思?

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

操作系统--------调度算法篇

目录 一.先来先服务调度算法&#xff08;FCFS&#xff09; 二.短作业优先调度算法&#xff08;SJF&#xff09; 2.1.SJF调度算法缺点 三.优先级调度算法 3.1优先级调度算法的类型 1.非抢占优先级调度算法 2.抢占优先级调度算法 3.2优先级的类型 3.1静态优先级 3.2动态…...

宝塔composer 安装laravel依赖出现的问题

环境宝塔、PHP版本8.0.2、laravel9 问题1&#xff1a;PHP Fatal error: Uncaught Error: Call to undefined function Composer\XdebugHandler\putenv() 办法&#xff1a;把PHP版本disable_functions这个中的putenv去掉&#xff0c;这个意思就是putenv被PHP对应的版本禁用了&…...

OpenCV自学笔记二十四:支持向量机

在OpenCV中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;算法的实现包含在ml模块中。SVM是一种常用的监督学习算法&#xff0c;主要用于分类问题。 SVM的原理&#xff1a;通过在特征空间中找到一个最优超平面&#xff0c;将不同类…...

网络初识

一 IP 地址 概念: IP 地址主要用于表示网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址。简单说&#xff0c;IP地址用于定位主机的网络地址 格式 IP 地址是一个32为的二进制数&#xff0c;通常被分割为4个“8位二进制数“&#xff08;也就是4个字节&…...

极坐标和直角坐标的雅克比矩阵推导

我们经常需要在一些问题中研究坐标系的关系&#xff0c;这里讲讲最常见的极坐标和直角坐标的雅克比矩阵的推导。以二维坐标为例&#xff0c;三维坐标也是同理。 1. 直角坐标和极坐标 直角坐标表示为 ( x , y ) (x,y) (x,y)&#xff0c;极坐标表示为 ( ρ , φ ) (\rho,\varph…...

经管博士科研基础【25】概率论中的相关基础概念

1. Support 在概率论中&#xff0c;"support"&#xff08;支撑集&#xff09;是指随机变量可能取值的集合。对于离散型随机变量&#xff0c;支撑集包含了所有可能的取值&#xff1b;而对于连续型随机变量&#xff0c;支撑集是指其密度函数或概率质量函数非零的区域。…...

计算机网络的相关知识点总结(一)

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 不管是OSI七层模型亦或是TCP/IP四层模型&#xff0c;它们的提出都有一个共同的目的&#xff1a;通过分层来将复杂问题细化&#xff0c;通过各个层级之间的相互配合来更好的解决计算机中出现的问题。 说到分层&#xf…...

下载github.com上的依赖资源

下载github.com上的依赖资源&#xff08;需要反复试才能成功&#xff0c;所以单独安装&#xff09; 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 能够给我们带来很大的帮助&#xff0c;因此我们要好好利用它。我们希望 GPT 输出令我们满意的内容&#xff0c;影响 GPT 输出内容的因素有模型和输入&#xff08;Prompt&#xff0c;提示词&#xff09;。 模型&#xff1a;我们可以选择不同的 GPT 产品&#xff0c;它们的模…...

用HTML、CSS和JavaScript制作的通用进制转换器

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

ArcGIS 10.3软件安装包下载及安装教程!

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

【数据增强】

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

Ae 效果:CC Force Motion Blur

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

2023华为杯研究生数学建模竞赛CDEF题思路+模型代码

全程更新华为杯研赛CDEF题思路模型及代码&#xff0c;大家查看文末名片获取 华为杯C题思路分析 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作…...

FP独立站之黑科技:AB站收款、斗篷CLOAK

最近一段时间经常有不少小伙伴来咨询我独立站的相关的业务&#xff0c;因为很多独立站卖家觉得独立站不好做&#xff0c;再加上跨境平台禁止特货类产品的销售&#xff08;如FP产品、成人用品、电子烟、灰黑类产品等等&#xff09;&#xff0c;但这类产品市场需求大&#xff0c;…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

基于小程序老人监护管理系统源码数据库文档

摘 要 近年来&#xff0c;随着我国人口老龄化问题日益严重&#xff0c;独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长&#xff0c;随之而来的是日益突出的老年人问题&#xff0c;尤其是老年人的健康问题&#xff0c;尤其是老年人产生健康问题后&…...