nginx的知识面试易考点

Nginx概念

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

Nginx 专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率,能经受住高负载的考验,有报告表明能支持高达50000个并发连接数。

在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品:Nginx 在美国是做虚拟主机生意的老板们经常选择的软件平台之一。

反向代理

在说反向代理之前,先来说说什么是代理和正向代理。

代理

代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client(局域网)访问外网server用的。 后来出现了反向代理,反向这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内。

正向代理

正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端。

正向代理类似一个跳板机,代理访问外部资源。

比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服服务上,代理服务器能够访问谷歌,这样由代理去访问谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。

反向代理

反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端。

客户端是感知不到代理服务器的存在。

是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

负载均衡

关于负载均衡,先来举个例子:

地铁大家应该都坐过吧,我们一般在早高峰乘地铁时候,总有那么一个地铁口人最拥挤,这时候,一般会有个地铁工作人员A拿个大喇叭在喊“着急的人员请走B口,B口人少车空”。而这个地铁工作人员A就是负责负载均衡的。

为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

Nginx提供的负载均衡主要有三种方式:轮询,加权轮询,Ip hash。

轮询

nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABCABCABCABC…

upstream mysvr { server 192.168.8.1:7070; server 192.168.8.2:7071;server 192.168.8.3:7072;
}

加权轮询

根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBCCCABBCCC…

upstream mysvr { server 192.168.8.1:7070 weight=1; server 192.168.8.2:7071 weight=2;server 192.168.8.3:7072 weight=3;
}

ip_hash

iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

upstream mysvr { server 192.168.8.1:7070; server 192.168.8.2:7071;server 192.168.8.3:7072;ip_hash;
}

动静分离

动态与静态页面区别

  • 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源(如:HTML,JavaScript,CSS,img等文件)。
  • 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变(如:.jsp、servlet 等)。

什么是动静分离

  • 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

  • 动静分离简单的概括是:动态文件与静态文件的分离。

为什么要用动静分离

为了加快网站的解析速度,可以把动态资源和静态资源用不同的服务器来解析,加快解析速度。降低单个服务器的压力。

Nginx安装

windows下安装

1、下载nginx

nginx.org/en/download… 下载稳定版本。以nginx/Windows-1.20.1为例,直接下载 nginx-1.20.1.zip。 下载后解压,解压后如下:

2、启动nginx

  • 直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

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

3、检查nginx是否启动成功

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

Docker安装nginx

我之前的文章也讲过Linux下安装的步骤,我采用的是docker安装的,很简单。

1、查看所有本地的主机上的镜像,使用命令docker images

2、创建 nginx 容器 并启动容器,使用命令docker run -d --name nginx01 -p 3344:80 nginx

3、查看已启动的容器,使用命令docker ps

[图片上传失败…(image-af849a-1631168446877)]

浏览器访问服务器ip:3344,如下,说明安装启动成功。

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

linux下安装

1、安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

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 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

4、OpenSSL 安装

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

yum install -y openssl openssl-devel

5、下载安装包

手动下载.tar.gz安装包,地址:nginx.org/en/download…

下载完毕上传到服务器上 /root

6、解压

tar -zxvf nginx-1.20.1.tar.gz
cd nginx-1.20.1

7、配置

使用默认配置,在nginx根目录下执行

./configue
make
make install

查找安装路径: whereis nginx

8、启动 nginx

./nginx

启动成功,访问页面:ip:80

Nginx常用命令

注意:使用Nginx操作命令前提,必须进入到Nginx目录 /usr/local/nginx/sbin

1、查看Nginx版本号:./nginx -v

2、启动 Nginx:./nginx

3、停止 Nginx:./nginx -s stop 或者./nginx -s quit

4、重新加载配置文件:./nginx -s reload

5、查看nginx进程:ps -ef|grep nginx

Nginx配置文件

Nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf

Nginx配置文件有3部分组成:

1、全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,比如:worker_processes 1

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。一般设置值和CPU核心数一致。

2、events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,比如:worker_connections 1024

表示每个 work process 支持的最大连接数为 1024,这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

3、http块

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;#监听端口server_name  localhost;#域名location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

这算是 Nginx 服务器配置中最频繁的部分。

演示示例

反向代理/负载均衡

我们在windows下演示,首先我们创建两个springboot项目,端口是9001和9002,如下:

我们要做的就是将localhost:80代理localhost:9001localhost:9002这两个服务,并且让轮询访问这两个服务。

nginx配置如下:

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream jiangwang {server 127.0.0.1:9001 weight=1;//轮询其权重都默认为1server 127.0.0.1:9002 weight=1;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;proxy_pass http://jiangwang;}}}

我们先将项目打成jar包,然后命令行启动项目,然后在浏览器上访问localhost来访问这两个项目,我也在项目中打印了日志,操作一下来看看结果,是不是两个项目轮询被访问。

可以看到,访问localhost,这两个项目轮询被访问。

接下来我们将权重改为如下设置:

upstream jiangwang {server 127.0.0.1:9001 weight=1;server 127.0.0.1:9002 weight=3;
}

重新加载一个nginx的配置文件:nginx -s reload

加载完毕,我们再访问其localhost,观察其访问的比例:

结果显示,9002端口的访问次数与9001访问的次数基本上是3:1

动静分离

1、将静态资源放入本地新建的文件里面,例如:在D盘新建一个文件data,然后再data文件夹里面在新建两个文件夹,一个img文件夹,存放图片;一个html文件夹,存放html文件;如下图:

2、在html文件夹里面新建一个a.html文件,内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Html文件</title>
</head>
<body><p>Hello World</p>
</body>
</html>

3、在img文件夹里面放入一张照片,如下:

4、配置nginx中nginx.conf文件:

location /html/ {root   D:/data/;index  index.html index.htm;
}location /img/ {root   D:/data/;autoindex on;#表示列出当前文件夹中的所有内容
}

5、启动nginx,访问其文件路径,在浏览器输入http://localhost/html/a.html,如下:

6、在浏览器输入http://localhost/img/

Nginx工作原理

mater&worker

master接收信号后将任务分配给worker进行执行,worker可有多个。

worker如何工作

客户端发送一个请求到master后,worker获取任务的机制不是直接分配也不是轮询,而是一种争抢的机制,“抢”到任务后再执行任务,即选择目标服务器tomcat等,然后返回结果。

worker_connection

普通的静态访问最大并发数是:worker_connections * worker_processes/ 2 ;若是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/ 4 ,因为作为反向代理服务器,每个并发会建立与客户端的连接和后端服务器的连接,会占用两个连接。

当然了,worker数也不是越多越好,worker数和服务器的CPU数相等时最适宜的。

优点

可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作每个 woker 是独立的进程,若其中一个woker出现问题,其他继续进行争抢,实现请求过程,不会造成服务中断。

总结

关于 Nginx 的基本概念、安装教程、配置、使用实例以及工作原理,本文都做了详细阐述。希望本文对你有所帮助。

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

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

相关文章

C#用链表和数组分别实现堆栈

1.链表 实现栈的四个基本功能 入栈 出栈 长度 栈顶值 public class 基础 : MonoBehaviour {public class MyStack{//定义每一个元素的数据结构 //下一个元素 和 该元素的值public class StackData{public StackData next;public object data;public StackData(StackData next,…

linux驱动编程 - kfifo先进先出队列

简介&#xff1a; kfifo是Linux Kernel里面的一个 FIFO&#xff08;先进先出&#xff09;数据结构&#xff0c;它采用环形循环队列的数据结构来实现&#xff0c;提供一个无边界的字节流服务&#xff0c;并且使用并行无锁编程技术&#xff0c;即当它用于只有一个入队线程和一个出…

nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点

目录 安装nginx配置nginx其它权限配置 安装nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下输入:set nu或:set number可以显示行号 复制如下内容&#xff1a; server {listen 80;server_name…

【0294】Postgres内核 dynahash 之 hash_search 实现原理

相关文章: 【0289】Postgres内核之哈希表(Hash Tables) 【0290】Postgres内核之dynahash(动态哈希表,dynamic hash tables)(概念篇) 【0291】Postgres内核之dynahash table 创建 【0292】Postgres内核源码之dynahash 插入entry实现 【0293】Postgres内核之创建 dynahas…

ESP32 通过蓝牙显示歌词代码示例

通过蓝牙协议播放音乐&#xff0c;有的时候需要显示歌词&#xff0c;这里就是a2dp库获取了歌词 值得注意的是要想正确获取到歌词&#xff0c;必须打开各种播放器的字幕&#xff08;歌词&#xff09;开关 本项目用了三个开源库 a2dp&#xff0c;tft_espi,xfont. a2dp &#x…

基于python实现的监听服务接口是否正常,发送异常消息到钉钉群

获取钉钉机器人 创建钉钉群组(要求至少三个成员)进入群组 设置>机器人>添加机器人选择自定义机器人 按照要求填写完获取到 Webhook的链接 实现代码 from time import sleep import requests import json from datetime import datetime import logging# 配置日志记录的…

数据结构第11节: B树

B树是一种自平衡的树数据结构&#xff0c;它能够保持数据排序&#xff0c;并且在插入、删除和查找操作中具有对数时间复杂度。B树广泛应用于文件系统、数据库和索引中&#xff0c;因为它们可以有效地处理大量数据。 B树的特点&#xff1a; 所有叶子节点都位于同一层。每个节点…

【】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结&#xff1a; 小菜鸡写一写基础深度学习的问题&#xff08;复制大佬的&#xff0c;自己复习用&#xff09; - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …

.net 调用海康SDK的跨平台解决方案

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔序言 上2篇海康SDK使用以及常见的坑…

PCL 点云PFH特征描述子

点云PFH特征描述子 一、概述1.1 概念1.2 算法原理一、代码实现二、结果示例一、概述 1.1 概念 点特征直方图PFH(Point Feature Histograms)描述子:用于表示点云中每个点的局部几何形状信息,它是一种直方图描述子,包括了点云的法线方向和曲率信息,PFH描述子可以帮助区分不同…

深入Django(八)

掌握Django的管理后台 引言 在前七天的教程中&#xff0c;我们介绍了Django的基础架构、模型、视图、模板、URL路由、表单系统以及数据库迁移。今天&#xff0c;我们将深入了解Django的管理后台&#xff0c;这是一个功能强大的内置管理界面&#xff0c;用于创建、更新、查看和…

【JavaEE精炼宝库】文件操作(1)——基本知识 | 操作文件——打开实用性编程的大门

目录 一、文件的基本知识1.1 文件的基本概念&#xff1a;1.2 树型结构组织和目录&#xff1a;1.3 文件路径&#xff08;Path&#xff09;&#xff1a;1.4 二进制文件 VS 文本文件&#xff1a;1.5 其它&#xff1a; 二、Java 操作文件2.1 方法说明&#xff1a;2.2 使用演示&…

QT面试笔记总计

一 Qt 保证多线程安全? 使互斥锁保证多线程安全性。QMutex类、。使用读写锁保证多线程安全性&#xff0c;QReadWriteLock。使用信号和槽机制保证多线程安全性。使用显示切换保证多线程安全性。QTread类。 Qt 中的事件与信号的区别? 事件与信号的实现机制不同&#xff1b;事…

HCIA综合实验

学习新思想&#xff0c;争做新青年。今天学习的是HCIA综合实验&#xff01; 实验拓扑 实验需求 总部&#xff1a; 1、除了SW8 SW9是三层交换机&#xff0c;其他交换机均为2层交换机。 2、GW为总部的出口设备&#xff0c;使用单臂路由技术&#xff0c;VLAN10,20,100的网关都在GW…

ERROR: “armeabi-v7a“ not supported for HarmonyOS

IDE 从 devecostudio-mac-4.1.3.700 升级至 devecostudio-mac-5.0.3.403 后抛出了如下异常: ERROR: "armeabi-v7a" not supported for HarmonyOS. 解决办法 一.entry/build-profile.json5 需 entry/build-profile.json5 的 abiFilters 中移除 "armeabi-v7a&qu…

计算机网络体系结构详解:协议与分层

在学习计算机网络时&#xff0c;理解网络协议与分层体系结构是至关重要的。本文将详细介绍这些概念&#xff0c;帮助基础小白快速入门。 1. 什么是网络协议 网络协议是计算机网络中用于数据交换的规则和标准。这些规则规定了数据格式、时序以及发送和接收数据时的动作。网络协…

Unity3D瓦片地图辅助定位工具

介绍 该工具用于TileMap的瓦片辅助定位&#xff0c;通过键盘或鼠标按瓦片尺寸0到1的比例作为单次移动值移动定位点游戏对象。当采用定位点游戏对象映射瓦片时&#xff0c;可使用该工具来移动定位点游戏对象&#xff0c;在新版本Unity3D的TileMap编辑器中可使用GameObject Brush…

基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对流浪动物信息管理的提升&…

【React】React18 Hooks之useState

目录 useState案例1&#xff08;直接修改状态&#xff09;案例2&#xff08;函数式更新&#xff09;案例3&#xff08;受控表单绑定&#xff09;注意事项1&#xff1a;set函数不会改变正在运行的代码的状态注意事项2&#xff1a;set函数自动批量处理注意事项3&#xff1a;在下次…

实现基于Spring Security的权限管理系统

实现基于Spring Security的权限管理系统 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Web应用中&#xff0c;权限管理系统是至关重要的组成部分。通过…