nginx知识点详解:反向代理+负载均衡+动静分离+高可用集群

一、nginx基本概念

1. nginx是什么,做什么事情?

Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。Nginx转为性能优化而开发,能经受高负载考验。支持热部署,启动容易,运行时间长。

2. 反向代理

正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

反向代理:客户端对代理无感知,客户端不需要任何配置即可访问服务器。客户端只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

3. 负载均衡

增加服务器的数量,将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将附在分发到不同的服务器就是负载均衡。

负载均衡是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户良好的体验。

策略:

1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,能自动剔除。

2.weight(权重):权重默认为1,权重越高被分配的客户端越多。

3.ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4. fair方式:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

4. 动静分离

把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力,加快网站的解析速度。

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。

动静分离从目前实现角度来讲大致分为2种:一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案,另外一种方法是动态跟静态文件混在一起发布,通过nginx分开。

通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确定是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件不建议使用Expires来缓存),在这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓去,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。

二、nginx安装、常用命令和配置文件

1. 在linux系统中安装nginx

首先打开终端:

输入ifconfig看ens33中inet中的值,如果没有显示ip地址就用nmtui指令对ens33进行连接后再次尝试:

第1步:使用远程连接工具连接linux系统。

打开Xshell(Xshell好处:1.避免切进切出影响效率 2.复制粘贴不方便)填写主机名ip其余默认:

 用户名是user,输入虚拟机上Linux密码即可登录:

 

第2步:下载nginx相关素材(依赖)

1. 下载pcre、openssl和zlib:

下面一键安装:

sudo yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

通过下面的连接下载tar.gz文件,我下载的是1.24.0

Index of /download/ (nginx.org)

解压压缩文件:tar -xvf nginx-1.24.0.tar.gz 

进入nginx文件:cd nginx-1.24.0/   然后输入:./configure

编译安装:sudo make install

进入sbin:cd /usr/local/nginx/sbin    运行nginx:sudo ./nginx

下面这样是成功:

:q!是退出

访问端口80,但默认该端口是不开放的,因此要按照如下方法打开该端口:

查看防火墙:sudo firewall-cmd --list-all

开放80端口:sudo firewall-cmd --add-port=80/tcp --permanent

重启防火墙:sudo firewall-cmd --reload

开放端口后即可访问:

2. nginx常用命令

使用nginx操作命令前提条件:必须进入到nginx的目录里:

在[user@localhost ~]$或者[user@localhost /]$目录下:cd /usr/local/nginx/sbin

查看nginx的版本号:./nginx -v

启动nginx:./nginx

关闭nginx:sudo ./nginx -s stop

重新加载nginx(可以重新加载配置文件,使其生效):sudo ./nginx -s reload

3. nginx配置文件

打开进入文件vi 文件名

1. nginx配置文件所在位置

/usr/local/nginx/conf/nginx.conf

2. nginx配置文件的组成

由3部分组成

第1部分:全局块

主要设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组),允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入。

比如:worker_processes 1; 当worker_processes的值越大,可以支持的并发处理数量也就越多。

第2部分:events块

events块涉及的指令主要影响Nginx服务器与用户的网络连接,选取哪种事件驱动模型来处理连接,请求,每个word process可以同时支持的最大连接数等。

worker_connection 1024;用户连接数,表示支持最大的连接数是多少。

第3部分:http块

3.1 http块

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http块也可以包括http全局块、server块。

3.2 全局块

http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、但连接请求上限等。

3.3 server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

小块1:全局server块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置

小块2:location块

一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向,数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

listen 80; 表示nginx目前监听的端口是80端口。

server_name localhost表示主机名称。

location / {} 本地或者路径的意思,如果请求中带有一个斜杠就进行跳转。

三、nginx实现反向代理

3.1 反向代理准备工作

1.1 实现效果:打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统的tomcat主页面中。

1.2 准备工作:

第1步:在linux系统安装tomcat,将tomcat安装文件放到linux系统中,解压sudo tar -xvf apache-tomcat-8.5.93.tar.gz,进入tomcat的bin目录中,./startup.sh启动tomcat服务器,使用默认端口8080。

第2步:对外开放访问的端口:

开放8080端口:firewall-cmd --add-port=8080/tcp --permanent

重启端口:firewall-cmd --reload

查看已开放的端口:firewall-cmd --list-all

第3步:访问,注意一定要用8080端口访问

3.2 反向代理实例一

第1步:在windows系统的host文件进行域名和ip对应关系的配置

c — Windows — System32 — drivers — etc — HOSTS

添加下面内容在文件中:

192.168.182.130 www.123.com

完成后域名www.123.com即对应192.168.182.130。 

在打开tomcat的前提下输入:www.123.com:8080可访问tomcat服务器: 

第2步:在nginx进行请求转发的配置(反向代理配置)

usr — local— nginx— conf— nginx.conf 进入到配置文件,对下面内容进行修改:

修改完后保存输入:wq!

前面已将192.168.182.130:80与域名www.163.com进行关联,当用户访问www.163.com会跳转到http://127.0.0.1:8080。

因为之前tomcat的页面是在192.168.182.130:8080所以我改造了一下,替换为proxy_pass http://192.168.182.130:8080;记得要加分号哦!

3.3 反向代理实例二

实现目标:

使用nginx反向代理,根据访问的路径跳转到不同端口的服务中。

nginx监听端口为9001

访问 http://192.168.182.130:9001/edu/ 直接跳转到192.168.182.130:8080

访问 http://192.168.182.130:9001/web/ 直接跳转到192.168.182.130:8081

准备工作:

第1步:创建测试服务器

准备2个tomcat服务器,一个8080端口,一个8081端口。

首先要进入到usr/src目录。sudo mkdir tomcat8080,sudo mkdir tomcat8081,创建2个文件夹。

分别进入2个文件夹,放入压缩包(这里可能出现导入失败,是权限问题,sudo rz),然后解压文件sudo tar -xvf apache..按Tab自动补全,

找到tomcat目前正在执行的进程 ps -ef | grep tomcat,停用进程 kill -9 进程号,

分别进入两个文件夹的apache文件,然后进入bin文件夹,然后./startup.sh启动。

进入8081中apache的文件夹的conf文件夹中,输入vi server.xml进入配置文件,修改未在注释中的端口,防止端口冲突。输入:wq!进行保存,重新查看是否更改。

第2步:基础测试

首先要开放对外访问的端口号,9001,8080,8081,然后查看是否端口开放完毕。

查看开放的端口:sudo firewall-cmd --list-all。开放80端口:sudo firewall-cmd --add-port=80/tcp --permanent。重启防火墙:sudo firewall-cmd --reload。

然后分别进行测试,看是否能访问tomcat,出现下面界面代表成功【注意:要检查xml文件中是否有其它字符,例如鼠标滚轮滚动会造成添加其它字符,这些字符会导致服务器无法正常启动】!

创建测试页面:a.html,在其中写入代码:<h1>8080!!</h1>。创建测试目录:在tomcat8080的webapps下创建文件夹edu,在tomcat8081的webapps下创建文件夹web。将带有8080字样的a.html文件放入edu文件夹下;将带有8081字样的a.html文件放入web文件夹下。可以通过如下方式访问,也可以将ip更改为域名www.123.com进行访问:

 

第3步:反向代理

注意按下面规则进行配置:

首先要找到nginx配置文件,usr — local — nginx — conf 然后vi nginx.conf进入配置,开始进行反向代理配置:

usr — local — nginx — sbin 输入 sudo ./nginx -s stop关闭端口,sudo ./nginx开启端口。

 

~ /web/ 表示必须是:域名/web/ 才可以识别

四、nginx实现负载均衡

实现效果:浏览器地栏输入地址http://192.168.182.132/edu/a.html,负载均衡效果,平均8080和8081端口中。

准备工作:准备2台tomcat服务器,一台8080,一台8081。在两台tomcat里面的webapps目录中,创建名称为edu的文件夹,在edu文件夹中创建页面a.html,用于测试。

在8081中的webapps目录下创建edu文件夹(mkdir edu),然后放入a.html文件,文件里写8081,测试能否通过http://192.168.182.132:8081/edu/a.html来显示文字,若无则记得打开服务器。

在usr — local — nginx — conf目录中vi nginx.conf进行配置:

重启服务器,进入conf — nginx 先关闭服务器./nginx -s stop,再开启服务器./nginx。

输入http://192.168.182.132/edu/a.html进行测试,效果是8081和8080交替出现,请求会被平均分担到不同服务器。

 

五、实现动静分离

在根目录创建一个文件夹data,进入data文件夹,创建文件夹www和image,把a.html文件放入www文件夹,在image里放入一个图片01.jpg。

进入 usr— local — nginx — conf 然后vi nginx.conf

进入usr — local — nginx— sbin 先输入./nginx -s stop,然后 ./nginx重启服务器。

测试1:浏览器种输入地址http://192.168.182.132/image/会出现文件夹下的文件列表,autoindex.on是列出文件夹下的内容:

测试2:在浏览器地址栏输入地址http://192.168.182.132/www/a.html

测试3:http://192.168.182.132/image/01.jpg

六、nginx配置高可用集群

现在存在的问题是:当nginx宕机后外部浏览器无法访问客户端

高可用:当nginx宕机后系统仍旧可以正常访问。

可以配置多个nginx,一台主服务器MASTER,一台备份服务器BACKUP.。当主服务器宕机可以切换到备份服务器。需要设置一个虚拟ip进行访问。

准备:需要两台nginx服务器,需要keepalived,需要虚拟ip。

1. 需要2台服务器,比如:192.168.182.132, 192.168.182.133。然后在另外一台服务器上也安装nginx。

2. 在2台服务器安装keepalived。可以使用yum命令进行安装。在usr目录下输入:yum install keepalived -y。在usr目录下输入rpm -q -a keepalived可以看到软件是否被下载。

3. 在usr — etc — keepalived目录下有keepalived.conf文件,可以拖到本地进行编辑,要讲内容替换为下面新的内容:输入vi keepalived.conf即可进入文件。配置文件如下:

global_defs全局定义。router_id写我们的服务器的名字,通过router_id可以访问我们服务器,进入usr — local — nginx — sbin — etc输入vi hosts:

vrrp_script chk_http_port是检测脚本和权重参数,script后写脚本的路径,如果脚本成立执行下面的操作。weight -20表示减少20服务器权重。

vrrp_instance VI_1是虚拟Ip的配置,state是状态,主服务器MASTER,备份服务器是BACKUP,interface填写网卡,priority是优先级,advert_int表示间隔多久时间发送一个心跳,authentication写的是权限校验的方式,auth_type PASS是密码方式,auth_pass 1111是密码,virtual_address是虚拟地址,客户端请求访问的地址。

下面是脚本文件,第4行填写的是nginx启动的路径,将脚本文件放在usr — local — src下:

配置从服务器,要更改interface,state,priority等信息。脚本信息不变:

七、nginx原理

1. master worker,只有1个master可以有多个worker,

2. worker采用争抢的机制进行工作。

3. 一个master和多个woker的好处:1、可以使用nginx -s reload热部署,利用nginx进行热部署操作。2、每个worker是独立的进程,如果其中有一个woker出现问题,其它woker会继续进行争抢,实现请求过程,不会造成服务中断。

4. worker数和服务器的cpu数是相等的最为适宜。

5. 发送请求的时候,每个worker占用2个或4个请求。

八、学习复盘

5.1 学习心得
5.2 面试真题
5.3 常见错误

压缩文件上传失败:sudo rz 获取权限

进入文件权限不够:su root 先进入到最高权限所有者

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

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

相关文章

三叠云电梯维保系统,全面提升电梯维保管理效率与质量

随着城市化进程的不断加速&#xff0c;电梯已成为现代建筑中不可或缺的交通工具。然而&#xff0c;电梯的安全和正常运行对于居民和物业公司来说至关重要&#xff0c;同时电梯维保一直是一个困扰物业管理公司和维保企业的难题。传统的维保方式因纸质记录的繁琐和错误频发&#…

整合车辆出险报告Api接口,轻松管理车险理赔!

随着车辆保有量的不断增加&#xff0c;车辆出险的情况也越来越普遍。对于车主来说&#xff0c;如何高效地管理车险理赔&#xff0c;处理保险事故是非常重要的。这时候我们就可以借助整合车辆出险报告API接口&#xff0c;实现快速定位理赔信息&#xff0c;轻松管理车险理赔。 一…

k8s 集群 -4 pod生命周期

首先 容器环境初始化,pod 由pod 镜像来提供 在pod 生命周期里 容器主要 分文两种&#xff1a;初始化容器和主容器 初始化 容器一定要成功运行并退出&#xff0c;当初始化容器运行退出完了之后 主容器开始和运行 主容器开始运行的时候 有两个探针 存活探针和就绪探针 Pod 可…

git reset origin --hard解决‘Your branch is ahead of ‘origin/xxxx‘ by xx commit.’

git reset origin --hard解决‘Your branch is ahead of origin/xxxx by xx commit.’ 如图&#xff1a; 之前是这么解决的解决git&#xff1a;Your branch is ahead of ‘XXX‘ by X commits-CSDN博客git删除/撤销远已经push到程服务器上某次代码提交场景&#xff1a;不小心把…

3D成像技术概述

工业4.0时代,三维机器视觉备受关注,目前,三维机器视觉成像方法主要分为光学成像法和非光学成像法,这之中,光学成像法是市场主流。 飞行时间3D成像 飞行时间成像(Time of Flight),简称TOF,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉…

自动化测试框架Playwright安装以及使用

最近&#xff0c;微软开源了一个非常强大的自动化项目叫 playwright-python 它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行&#xff0c;并提供了同步、异步的 API&#xff0c;可以…

基于微服务的第二课堂管理系统(素质拓展学分管理平台)SpringCloud、SpringBoot 分布式,微服务

基于微服务的第二课堂管理系统 一款真正的企业级开发项目&#xff0c;采用标准的企业规范开发&#xff0c;有项目介绍视频和源码&#xff0c;需要学习的同学可以拿去学习&#xff0c;这是一款真正可以写在简历上的校招项目&#xff0c;能够真正学到东西的一个项目&#xff0c;话…

OpenGL之坐标系统

将坐标变换为标准化设备坐标&#xff0c;接着再转化为屏幕坐标的过程通常是分步进行的&#xff0c;也就是类似于流水线那样子。在流水线中&#xff0c;物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个过渡坐标系(Inte…

【1993. 树上的操作】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵 n 个节点的树&#xff0c;编号从 0 到 n - 1 &#xff0c;以父节点数组 parent 的形式给出&#xff0c;其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点&#xff0c;所以 par…

Word中对象方法(Methods)的理解及示例(下)

【分享成果&#xff0c;随喜正能量】当你的见识多了&#xff0c;眼界宽了&#xff0c;格局大了&#xff0c;所有的磨难都将不再是磨难&#xff0c;而是助你成长的阶梯。 。 《VBA之Word应用》&#xff08;10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程…

机械寿命预测(基于NASA C-MAPSS数据的剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)

1.效果视频&#xff1a;机械寿命预测&#xff08;NASA涡轮风扇发动机剩余使用寿命RUL预测&#xff0c;Python代码&#xff0c;CNN_LSTM模型&#xff0c;有详细中文注释&#xff09;_哔哩哔哩_bilibili 环境库版本&#xff1a; 2.数据来源&#xff1a;https://www.nasa.gov/int…

Linux0.11——第二回 从0x7c00到0x90000

上一讲&#xff0c;讲了CPU执行操作系统的最开始的两行代码&#xff1a; mov ax, 0x07c0 mov ds, ax这两行代码将数据段寄存器 ds 的值变成了 0x07c0&#xff0c;方便之后访问内存时&#xff0c;利用这个段基址进行寻址。 接下来的代码&#xff1a; mov ax,0x9000 mov es,ax…

解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管

为全面保障物流仓储的安全性与完整性&#xff0c;解决仓库管理难题&#xff0c;优化物流仓储方式&#xff0c;提升仓储效率&#xff0c;降低人工成本&#xff0c;旭帆科技推出智慧仓储AI视频智能分析方案&#xff0c;利用物联网、大数据、云计算等技术&#xff0c;对仓储管理进…

【C刷题】day3

一、选择题 1、已知函数的原型是&#xff1a; int fun(char b[10], int *a); &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xff09; A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d); 【答案…

蓝牙电话之HFP—电话音频

1 媒体音频&#xff1a; 播放蓝牙音乐的数据&#xff0c;这种音频对质量要求高&#xff0c;数据发送有重传机制&#xff0c;从而以l2cap的数据形式走ACL链路。编码方式有&#xff1a;SBC、AAC、APTX、APTX_HD、LDAC这五种编码方式&#xff0c;最基础的编码方式是SBC&#xff0…

外卖小程序开发指南:打造完美的点餐体验

第一步&#xff1a;项目设置和初始化 首先&#xff0c;您需要选择一个适合您的开发平台&#xff0c;例如微信小程序、支付宝小程序或其他移动应用平台。接下来&#xff0c;创建一个新的小程序项目&#xff0c;并初始化所需的文件和目录。 示例代码&#xff08;微信小程序&am…

html怎么设置按钮返回顶部

在 HTML 中&#xff0c;我们可以通过一些代码和 CSS 样式来创建一个这样的按钮。 <button onclick"topFunction()" id"myBtn">返回顶部</button> <style> #myBtn { display: none; position: fixed; bottom: 20px; right: 30px; z-inde…

【算法专题突破】二分查找 - 704. 二分查找(16)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 题目非常简单&#xff0c;就是查找一个 target。 2. 算法原理 根据最基本的二分查找算法&#xff1a; 在一个…

spring中AbstractApplicationContext的refresh()

这个部分的源码看的次数不计其数了&#xff0c;每次看不同开源组件的调用过程中走到这里都有不同的收获。 spring 中 AbstractApplicationContext 的 refresh() 是 spring 的核心&#xff0c;几乎所有的逻辑都在是这里间接被调用。 如下源码为 spring boot 2.7.15 自带的 sprin…

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代&#xff0c;创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员&#xff0c;都会面临一个共同的挑战&#xff1a;如何在互联网上脱颖而出&#xff0c;吸引更多的读者和访客。而正是在这个背景下&#xff0c;AI伪原创工具逐渐崭露…