作为一名前后端开发,应该对Nginx有怎样的认识

作为一名前后端开发,应该对Nginx有怎样的认识


如果是一名前端,正常来说只需要好好写代码就行,至于部署相关的操作,我们通常接触不到,但不代表不需要了解

如果是一名后端,那么部署这个任务多半是离不开的,后端有时候什么都干!

相信大家多多少少都听说过 「Nginx」,给大家科普一下到底什么是Nginx,都能干些什么事

1.Nginx是什么


Nginx 是一个「轻量级、高性能的HTTP」和「反向代理服务器」,同时也是一个「通用代理服务器」

  • Nginx 是一个拥有高性能HTTP和反向代理服务器,其特点是占用内存少并发能力强,并且在现实中,nginx的并发能力要比在同类型的网页服务器中表现要好

  • Nginx 专为性能优化而开发,最重要的要求便是性能,且十分注重效率,有报告nginx能支持高达50000个并发连接数

2.什么是反向代理?正向代理?

其实只需要简单的两句话就可以解释清楚,客户端指的是用户,服务端指的是项目部署的服务

  • 正向代理:客户端不想让服务器知道客户端的ip,所以让代理服务器去访问,再返回给客户端。

  • 反向代理:服务器不想客户端知道是哪个服务器响应的,所以让代理服务器去分配,让空闲的服务器去响应。

3.Nginx作负载均衡

大家对微服务有所了解的话,应该都大概听说过负载均衡这个概念

用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

用最简单的话来说,原本老板给你一个任务你要一个人做,现在老板的这个任务派给了3个人做,这就是负载均衡

  • 如果没有负载均衡的话,客户端的操作通常是

    「客户端请求服务器,然后服务端去数据库查询数据,将返回的数据带给客户端」

但随着客户端越来越多,数据,访问量飞速增长,这种情况显然无法满足,我们从上图发现,客户端的请求和相应都是通过服务端的,那么我们加大服务端的量,让多个服务端分担,是不是可以减轻一台服务器所承担的压力了?

但此时对于客户端而言,他去访问这个地址就是固定的,才不会去管那个服务端有时间,你只要给我返回出数据就行,所以我们就需要一个管理者,将这些服务端找个老大过来,客户端直接找老大,再由老大分配谁处理谁的数据,从而减轻服务端的压力 ,而这个老大就是我们的Nginx反向代理服务器

  • 有了负载均衡,流程就会变为如下图

不一定是每台机器都处理5个,要根据具体的请求数量和负载均衡算法来讨论,这里就是单纯的给个事例的例子

4.Nginx实现动静分离

我们应该如何理解什么是动态资源,什么是静态资源呢?

静态资源:就拿前端来说,写一个html页面,没有发起任何请求,不管用户操作多少次,始终是这个html页面,页面数据没有任何变化

动态资源:当html页面有进行向后端发送请求,每次返回的数据都不一样的,这种就叫做动态资源,根据你的具体请求,动态返回数据

  • 当客户端通过浏览器发起请求的时候,没有实现动静分离的话,情况是这样的

可用把动态资源和静态资源在一起的这个框框理解为我们Java中的Tomcat,还记得可以将静态资源放在static下吗?

当Nginx访问静态资源的时候,先访问的是你后端的Tomcat,然后由Tomcat来访问静态资源

  • 当实现了动静分离后,就会变成

当我们有了Nginx后,不需要将前端的静态页面放到static了,直接交给Nginx进行处理,当访问静态资源的时候,直接由Nginx进行访问,无需经过Tomcat。

总结

以上是我对Nginx的一些理解,如果大家在Nginx的使用的时候遇到了问题,特别是用Docker搭Nginx时出现问题

可以看一看我的这篇文章:用Docker搭Nginx前端项目一直访问不到?部署在Nginx成功后,用浏览器访问,一直拿不到数据?Access-Control-Allow-Origin? - 掘金 (juejin.cn)

里面有我在使用Docker+Nginx遇到的的一些问题,还有我对 Access-Control-Allow-Origin 的理解供大家参考,里面也有我配置正确的Nginx配置过程

相关推荐
昙鱼5 分钟前
springboot创建web项目
java·前端·spring boot·后端·spring·maven
eternal__day5 分钟前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
天之涯上上9 分钟前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot
天天进步201510 分钟前
Vue项目重构实践:如何构建可维护的企业级应用
前端·vue.js·重构
2402_8575834911 分钟前
“协同过滤技术实战”:网上书城系统的设计与实现
java·开发语言·vue.js·科技·mfc
白宇横流学长11 分钟前
基于SpringBoot的停车场管理系统设计与实现【源码+文档+部署讲解】
java·spring boot·后端
小华同学ai13 分钟前
vue-office:Star 4.2k,款支持多种Office文件预览的Vue组件库,一站式Office文件预览方案,真心不错
前端·javascript·vue.js·开源·github·office
APP 肖提莫15 分钟前
MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
java·前端·算法
kirito学长-Java16 分钟前
springboot/ssm太原学院商铺管理系统Java代码编写web在线购物商城
java·spring boot·后端
爱学习的白杨树17 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring