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

【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:进行测试
在这里插入图片描述


在这里插入图片描述

相关文章:

【Nginx】Nginx了解(基础)

文章目录 Nginx产生的原因Nginx简介Nginx的作用反向代理负载均衡策略动静分离 Nginx的Windows下的安装Linux下的安装Nginx常用命令 负载均衡功能演示 Nginx产生的原因 背景 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发…...

十九)Stable Diffusion使用教程:ai室内设计案例

今天我们聊聊如何通过SD进行室内设计装修。 方式一:controlnet的seg模型 基础起手式: 选择常用算法,抽卡: 抽到喜欢的图片之后,拖到controlnet里: 选择seg的ade20k预处理器,点击爆炸按钮,得到seg语义分割图,下载下来: 根据语义分割表里的颜色值,到PS里进行修改: 语…...

虚拟机VMware安装centos以及配置网络

目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作:提前下载和安装好VMware。VMware的安装可以参考这一篇文章:VMware15的下载及安装教程。 1、CentOS7的下载 …...

call 和 apply:改变对象行为的秘密武器(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

工作中 docker 的使用积累

2 进入 openwrt 容器 docker exec -it openwrt /bin/sh3 查看 docker 信息 docker info4 启动容器 4 挂载 overlay mount -t overlay overlay -o lowerdirA:B,upperdirC,workdirworker /tmp/test -t overlay : 指定要挂载的文件系统类型为 overlayoverlay: 指定…...

初识SpringSecurity

目录 前言 特点 快速开始 导入依赖 运行项目 访问服务 权限控制 实现UserDetails接口 添加SecurityConfig配置类 测试接口DemoController 设置权限控制authorizeHttpRequests 结果分析 总结 前言 Spring Security是一个强大且高度可定制的身份验证和访问控制框架…...

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…...

技术点:实现大文件上传

大文件上传 实现思路 对于大文件上传考虑到上传时间太久、超出浏览器响应时间、提高上传效率、优化上传用户体验等问题进行了深入探讨,以下初略罗列各个知识点的实现思路: 大文件上传对文件本身进行了文件流内容 Blob 的分割,使用 Blob.pr…...

记一次挖矿病毒的溯源

ps:因为项目保密的原因部分的截图是自己在本地的环境复现。 1. 起因 客户打电话过来说,公司web服务异常卡顿。起初以为是web服务缓存过多导致,重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击,然后去查看web服务器管理…...

day05-报表技术-图形报表

1、图表报表简介 ​ 在大数据时代,人们需要对大量的数据进行分析,帮助用户或公司领导更直观的察觉差异,做出判断,减少时间成本,而在web项目中除了表格显示数据外,还可以通过图表来表现数据,这种…...

【Spring】@Transactional事务属性详解

文章目录 1、事务传播行为注意事务传播行为在不同类之间调用生效Propagation.REQUIRED(默认传播行为)Propagation.REQUIRES_NEWPropagation.NESTED 2、事务的隔离级别隔离级别设置 3、设置事务异常回滚3.1、默认情况3.2、设置回滚异常3.3、设置不回滚的异常 4、超时时间5、只读…...

通过css3的锚定滚动属性,实现分页加载时让滚动条不闪动

html标签 <div scroll"handleScroll" id"list-container"style"overflow-anchor:auto;overflow-y: auto;height: 80vh"><ul id"talks"v-for"(item,index) in msgList":key"item.roleiditem.timeitem.conten…...

使用Selenium与Scrapy处理动态加载网页内容的解决方法

博客正文&#xff08;包含详细注释&#xff09; 引言 在爬虫技术领域&#xff0c;处理动态加载的网页内容常常是一项挑战&#xff0c;尤其是对于那些通过用户滚动或其他交互动态加载更多内容的网站。本文将介绍如何结合使用Selenium和Scrapy来有效处理这类网页。 初探Seleni…...

Linux的权限(二)

目录 前言 文件类型和访问权限&#xff08;事物属性&#xff09; 补充知识 文件类型 文件操作权限 修改文件权限 chmod指令 文件权限值的表示方法 字符表示方法 8进制数值表示方法 权限有无带来的影响 修改文件角色 chown与chgrp指令 目录的rwx权限 补充知识 …...

网络服务IP属地发生变化的原因有哪些?

近期&#xff0c;许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的&#xff0c;而是发生了变动。这一现象引起了广大用户的关注和疑惑&#xff0c;对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑&#xff0c;我们对此现象进行了深入探究…...

OpenGL 着色器程序的保存和加载(二进制)

背景 为了提高OpenGL 着色器程序的编译和链接速度&#xff0c;我们可以将程序保存为二进制进行加载&#xff0c;可以大幅度提升加载效率。 方法 以下是加载和保存二进制程序的方法。 // 加载着色器程序的二进制文件到已创建的着色器程序中 bool loadPragram(const std::str…...

【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换

前言 【Unity 实用工具篇】| 游戏多语言解决方案&#xff0c;官方插件Localization 实现本地化及多种语言切换一、多语言本地化插件 Localization1.1 介绍1.2 效果展示1.3 使用说明 二、 插件导入并配置2.1 安装 Localization2.2 全局配置 三、多语言映射表3.1 创建多语言文本配…...

疯狂SQL转换系列- SQL for Tencent Cloud VectorDB

为了尽量保证使用者通过统一的SQL标准访问各类型数据库&#xff0c;我们这里开启了“疯狂SQL转换系列”。转换的语法效果不一定是最好的&#xff0c;更多是为用户提供一个统一的数据库交互体验。转换数据库目标的确认更多是内生的。基于我们对业务发展的需要。该向量库SQL转换的…...

Excel中的INDIRECT函数用法

当在 Excel 中使用 INDIRECT 函数时&#xff0c;它可以帮助我们通过引用字符串中的单元格地址来获取对应单元格的值。这个函数非常有用&#xff0c;特别是在需要动态地引用其他单元格的情况下。下面是 INDIRECT 函数的一些用法和示例&#xff1a; 基本用法&#xff1a; INDIREC…...

Spring-temp

IOC/DI实现步骤 1.配置元数据 2.实例化IOC 3.获取Bean 基于XML配置方式 管理组件 1.基于构造函数&#xff1a;有参、无参 2.基于静态工厂方法&#xff1a;有参、无参 依赖注入 1.构造函数 2.setter方法 Bean组件高级特性 1.作用域 2.生命周期 FactoryBean 基于注解 IOC Bean作…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...