【Nginx】Nginx了解(基础)

文章目录

  • Nginx产生的原因
  • Nginx简介
  • Nginx的作用
    • 反向代理
    • 负载均衡策略
    • 动静分离
  • Nginx的
    • Windows下的安装
    • Linux下的安装
      • Nginx常用命令
  • 负载均衡功能演示

Nginx产生的原因

背景

一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户

慢慢的,使用平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了

image-20231216212858916

于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求(由该代理服务器作负载均衡&&反向代理)

  • 希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上
  • 这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择,保证最佳体验,基于上述的需求,所以使用了Nginx。

Nginx简介

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好
  • Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法=>可以理解为正则表达式 )、Bug非常少的服务,Nginx 启动容易,并且几乎可以做到7*24小时不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
  • Nginx底层是C语言实现的,官方数据测试表明能够支持高达 5w个并发连接数的响应

Nginx的作用

反向代理

  • 作为Http代理=>反向代理:作为web服务器最常用的功能之一

关于正向代理和反向代理

正向代理:用于代理客户端的请求(帮客户端请求外部资源),服务器只知道有客户端的请求到来,但是并不知道是哪个客户端请求的 (例如:VPN)

正向代理的工作方式

1.客户端配置网络设置,将请求发送给正向代理服务器

2.正向代理服务器接收到请求后,根据客户端请求的目标地址,代表客户端向目标服务器发送请求

3.目标服务器处理请求并发送响应

4.正向代理服务器接收到响应后,将其返回给客户端

正向代理的主要功能包括:

1.访问控制:正向代理可以根据特定的策略和规则,对客户端的请求进行访问控制,例如限制特定网站的访问或实施身份验证

2.隐私保护:正向代理可以隐藏客户端的真实身份和位置,提供一定的匿名性

3.缓存:正向代理可以缓存常用的内容,以减少网络流量和提高响应速度

4.加速访问:正向代理服务器可以通过压缩、缓存和优化网络连接等方式,加速客户端与目标服务器之间的通信


反向代理 :扮演服务器的角色,接收来自客户端的请求,并将其转发到后端服务器,对于用户是无感知的,客户发送请求,但是不知道哪个服务端收到了请求,客户端只和反向代理进行通信

  • 比如,百度的服务器是在不同的服务器上,但是我们只需要搜索baidu.com就行,该请求可能会被反向代理路由到离你物理位置最近的服务器,或者根据网络条件和负载均衡算法进行分配。这样做可以减少响应时间并提高搜索的效率

反向代理的工作方式

1.客户端向反向代理发送请求

2.反向代理接收到请求后,根据预先设置的规则,将请求转发到一个或多个后端服务器

3.后端服务器处理请求并发送响应

4.反向代理接收到响应后,将其返回给客户端

反向代理的主要功能包括

1.负载均衡反向代理可以将请求分发到多个后端服务器,以实现负载均衡,提高系统的性能和可扩展性

2.缓存:反向代理可以缓存静态内容减轻后端服务器的负载,提高响应速度

3.安全性:反向代理可以作为防火墙,保护后端服务器免受恶意请求和攻击

4.SSL 加密:反向代理可以终止 SSL 连接,解密传入的请求,并将其转发给后端服务器,提供安全的通信


负载均衡策略

Nginx提供的负载均衡策略有2种:内置策略和扩展策略

  • 内置策略:轮询加权轮询Ip hash

    • 轮询(Round Robin):默认的负载均衡策略,按照顺序将请求依次分发给后端服务器‘
    • IP 哈希(IP Hash):根据客户端的 IP 地址将请求分发给后端服务器,确保同一客户端的请求始终发送到同一台服务器,以保持会话的一致性
    • 最少连接(Least Connections):将请求发送给当前连接数最少的后端服务器,以实现负载均衡
    • 加权轮询(Weighted Round Robin):根据后端服务器的权重设置,按比例分配请求
    • 加权最少连接(Weighted Least Connections):根据后端服务器的权重和当前连接数,动态地分配请求
  • 扩展策略:天马行空,只有你想不到的没有他做不到的,可以在nginx的配置文件当中进行配置

方式1:普通轮询

每个服务器之间轮询处理请求,每台服务器处理请求的数量和概率都是相同的

方式2:加权轮询:因为可能不同服务器性能不一样,能接收的请求数量不同

方式3:IP Hash

对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端(IP相同)的请求分发给同一台服务器进行处理

例如:不能在每台服务器上都保存客户端的session信息,所以要么就保证同一个客户端的请求每次都发送给特定的服务器,要么就使用redis作为session信息共享


动静分离

关于静态文件

在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件

让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,就可以根据静态资源的特点将其做缓存操作,提高资源响应的速度
在这里插入图片描述

通过使用Nginx进行动静分离,将动态请求转发给后端应用服务器(如PHP-FPM、Node.js等),而将静态请求直接由Nginx服务器处理

Nginx的

Windows下的安装

下载Nginx:http://nginx.org/en/download.html (建议下载稳定版本)

image-20231216214933976

解压完成后:

image-20231216215124106

启动Nginx

方法1:直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

方法2:打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

image-20231216215740227

检查Nginx是否启动成功

直接在浏览器地址栏输入网址 localhost:80回车,出现以下页面说明启动成功

image-20231216215616955

注意:此处我访问的是8084端口,可以在配置文件当中修改nginx监听的端口号

修改配置文件

nginx的配置文件是conf目录下的``nginx.conf`文件,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可

否则启动nginx的时候会出现类似下述的错误,此时只需要修改nginx监听的端口号即可

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

image-20231216215830957

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx只需要在cmd控制台当中执行命令 nginx -s reload 让改动生效

关闭Nginx

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

方法1:输入nginx命令

  • nginx -s stop(快速停止nginx)
  • nginx -s quit(完整有序的停止nginx)

方法2:使用taskkill 命令 (taskkill是用来终止进程的)

  • taskkill /f /t /im nginx.exe
  • 选项解释:/f是强制终止 /t是终止指定的进程和任何由此启动的子进程,/im是指定进程名称

注意:如果输入命令的时候出现拒绝访问等情况,可以尝试以管理员方式打开cmd控制台

Linux下的安装

前置准备

1)要确定有gcc环境

gcc -v  # 查看版本
yum install gcc-c++  # 如果没有的话就安装一下

2)PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库

nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库

yum install -y pcre pcre-devel

3)zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行解压,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

4)OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https,所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

5)在官网下载nginx压缩包,并上传到linux上
在这里插入图片描述

6)在Linux当中解压安装包

tar -zxvf nginx-1.20.1.tar.gz # 解压安装包
cd nginx-1.20.1/ # 进入目录,发现和windows没什么区别

7)进行自动配置

./configure

在这里插入图片描述

  • 执行make命令
  • 执行make install命令
  • 查看是否安装成功 =>whereis nginx

补充:whereis 是用于查找可执行文件、源代码文件和帮助文档位置的命令

[root@cVzhanshi nginx-1.20.1]# whereis nginx
nginx: /usr/local/nginx
  • 到安装目录去看看
    在这里插入图片描述
  • 进入sbin目录,执行可执行文件

在这里插入图片描述

  • 在浏览器看是否执行成功
    在这里插入图片描述

Nginx常用命令

首先需要进入到nginx可执行文件的文件夹当中

cd /usr/local/nginx/sbin/  #进入nginx可执行文件所在的路径
./nginx  #启动
./nginx -s stop  #强制停止
./nginx -s quit  #安全退出
./nginx -s reload  #重新加载配置文件  一旦改了配置文件就需要执行该指令才能生效
ps aux|grep nginx  #查看nginx进程

注意:如果nginx连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口

防火墙相关命令:

# 开启防火墙
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

负载均衡功能演示

先进行配置文件的修改

#每一行配置的最后由分号结尾
http {...upstream 任意名字Name{ #负载均衡配置  #服务器资源 (有哪些服务器)#服务器组包含两个服务器,分别是127.0.0.1:8082和127.0.0.1:8081,并且它们的权重都被设置为1server 127.0.0.1:8082/ weight=1;  #weight为服务器的权重server 127.0.0.1:8081/ weight=1;}#定义了一个虚拟主机(server),监听默认的80端口,并使用localhost作为服务器名server {#http默认端口号为80  https默认端口号为443listen       80;server_name  localhost;#代理转发#只要是80端口 根目录下的请求就代理到http://任意名字Namelocation / {#root指令指定了静态文件的根目录为html,index指令定义了默认的索引文件root   html;index  index.html index.htm;#proxy_pass指令将请求转发给之前定义的上游服务器组任意名字Name。这意味着当有请求到达根路径时,Nginx会将请求代理转发给上游服务器组中的服务器,实现负载均衡proxy_pass http://任意名字Name;}...
}

image-20231205193103666

步骤1:启动两个端口的项目

在这里插入图片描述

步骤2:启动nginx

步骤3:进行测试
在这里插入图片描述


在这里插入图片描述

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

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

相关文章

lv12 uboot移植深化 9

u-boot-2013.01移植 【实验目的】 了解u-boot 的代码结构及移植的基本方法 【实验环境】 ubuntu 14.04发行版FS4412实验平台交叉编译工具arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行 【实验步骤】 1 建立自己的平台 1.…

flutter 代码混淆

Flutter 应用混淆: Flutter 应用的混淆非常简单,只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 –obfuscate --split-debug-info 用来指定输出调试文件的位置,该命令会生成一个符号映射表。目前…

【TB作品】基于单片机的机械通风控制系统,实时温度和二氧化碳浓度

硬件: (1)51系列单片机,拟采用STC89C52RC; (2)DS18B20温度传感器; (3)二氧化碳浓度传感器:https://item.taobao.com/item.htm?spma21n57.1.0.0.1…

紫光展锐CEO任奇伟博士:展锐5G芯筑基当下,迈向未来

12月5日,紫光集团执行副总裁、紫光展锐CEO任奇伟博士受邀出席2023世界5G大会5G产业强基发展论坛,发表了题为《展锐5G芯:筑基当下,迈向未来》的演讲。 ​ 世界5G大会由国务院批准,国家发展改革委、科技部、工信部与地方…

小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连

小程序使用Nodejs作为服务端,Nodejs与MYSQL数据库相连 一、搭建环境二、配置Nodejs三、与小程序交互四、跨域处理/报错处理五、nodejs连接mysql数据库六、微信小程序连接nodejs报错七、小程序成功与服务端相连,且能操作数据库一、搭建环境 新建空文件夹:Win + R进入cmd命令界…

再不跳槽,就晚了

从时间节点上来看,3月、4月是每年跳槽的黄金季! 以 BAT 为代表的互联网大厂,无论是薪资待遇、还是平台和福利,都一直是求职者眼中的香饽饽,“大厂经历” 在国内就业环境中无异于一块金子招牌。 现在年底了&#xff0…

【推荐系统】推荐算法数学基础

【大家好,我是爱干饭的猿,本文重点介绍推荐系统涉及的数学知识、推荐系统涉及的概率统计知识。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【推…

R语言|分面中嵌入趋势线

简介 关于分面的推文,小编根据实际科研需求,已经分享了很多技巧。例如: 分面中添加不同表格 分面中添加不同的直线 基于分面的面积图绘制 分面中的细节调整汇总 基于分面的折线图绘制 最近科研中又遇到了与分面相关的需求:…

CF1898C Colorful Grid(构造)

题目链接 题目大意 n 行 m 列 的一个矩阵,每行有m - 1条边,每列有 n - 1 条边。 问一共走 k 条边,能不能从 (1, 1),走到(n, m),要求该路径上&am…

【一文带你掌握Java中方法定义、调用和重载的技巧】

方法的定义和调用 方法的定义 方法(method)是一段用于实现特定功能的代码块,类似于其他编程语言中的函数(function)。方法被用来定义类或类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象表示。方法与面向…

十八)Stable Diffusion使用教程:艺术二维码案例

今天说说怎么样使用SD生成艺术二维码。 我们直接上图。 方式有三种,分别如下: 1)方式一:直接 contronet 的tile模型进行控制 使用QRBTF Classic生成你的二维码。 首先输入网址,选择喜欢的二维码样式(推荐第一种就行): 然后选择相应参数,这里推荐最大的容错率,定…

JieLink+智能终端操作平台存在弱口令漏洞

产品简介 捷顺JeLink智能终端操作平台(JSOTC2016 fJeLink)是捷顺历经多年行业经验积累,集智能硬件技术视频分析技术、互联网技术等多种技术融合,基于B/S架构,实现核心业务处理模型(用户中心、投权中心财务中心中心值班室、 运维中心车行客户…

《地理信息系统原理》笔记/期末复习资料(11. GIS的输出与地图可视化)

目录 11. GIS的输出与地图可视化 11.1. GIS的输出 11.1.1. 输出方式 11.1.2. GIS的图形输出设备 11.2. 地图符号 11.2.1. 地图符号的实质 11.2.2. 地图符号的分类 11.2.3. 地图符号的设计要求 11.3. 专题信息表达 11.3.1. 专题地图的基本概念 11.3.2. 专题地图的表示…

boost graph之基础

结构 属性相关 #mermaid-svg-LUDFVluXTOlnqK0d {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LUDFVluXTOlnqK0d .error-icon{fill:#552222;}#mermaid-svg-LUDFVluXTOlnqK0d .error-text{fill:#552222;stroke:#5522…

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案 吐槽1:Windows自带的Chrome内核版本的浏览器Microsofg Edge刚发布时可谓一股清流,启动速度快,占用内存较小,相信很多人也开始抛弃正代Chrome&…

【Spring】08 BeanNameAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将聚焦于其中的一个接口 BeanNameAware,介绍它的作…

Hudi 在 vivo 湖仓一体的落地实践

作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能。主要应用在流批同源、实时链路优化及宽表拼接等业务场景。 一、Hudi 基础能力及相关概念介绍 1.1 流批同源能力 与H…

go学习redis的学习与使用

文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1)Redis的启动:2)Redis的操作的三种方式3)说明:Redis安装好后,默认有16个数据库,初始默认使用0…

java导出word使用模版与自定义联合出击解决复杂表格!

1. 看一下需要导出什么样子的表格 如图所示,这里的所有数据行都是动态的,需要根据查询出来的数据循环展示。 如果只是这样的话,使用freemarker应该都可以搞定,但是他一列中内容相同的单元格,需要合并。 这对于表格样式…