一、Nginx简介

正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端把请求发给代理服务器,由代理服务器获得目标服务器的数据并返回给客户端。客户端是清楚目标服务器的地址的,而目标服务器是不清楚来自客户端,它只知道来自哪个代理服务器,所以正向代理可以屏蔽或隐藏客户端的信息。

反向代理:从上面的正向代理,你会大概知道代理服务器是为客户端作代理人,它是站在客户端这边的。其实反向代理就是代理服务器为服务器作代理人,站在服务器这边,它就是对外屏蔽了服务器的信息,常用的场景就是多台服务器分布式部署,像一些大的网站,由于访问人数很多,就需要多台服务器来解决人数多的问题,这时这些服务器就由一个反向代理服务器来代理,客户端发来请求,先由反向代理服务器,然后按一定的规则分发到明确的服务器,而客户端不知道是哪台服务器。常常用nginx来作反向代理。

Nginx的负载均衡:

负载:就是Nginx接受请求

均衡:Nginx将收到的请求按照一定的规则分发到不同的服务器进行处理

负载均衡:

1.增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

2.客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式在并发量很大的时候容易造成服务器直接崩溃,解决办法?

首先想到的是升级服务器的配置,比如提高CPU的执行频率,加大内存等提高机器的物理性能来解决此问题,但是随着摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。所以集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

Nginx支持的负载均衡调度算法方式如下:

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。
————————————————
版权声明:本文为CSDN博主「凉茶饭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aqleung/article/details/80923470

动静分离

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

二、Nginx常用命令和配置文件

Nginx常用命令

使用nginx操作命令的前提:必须进入到nginx的自动生成目录下/sbin文件夹下

安装目录:自己选择

自动生成目录:/usr/local/nginx

1.查看nginx的版本号

./nginx -v

2.启动nginx

./nginx

3.关闭nginx

./nginx -s stop

4.重新加载nginx

./nginx -s reload

Nginx配置文件

1.配置文件位置

/usr/local/conf/nginx.conf

2.nginx的组成部分

worker_processes  1;events {worker_connections  1024;
}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;}}
}

第一部分:全局块

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

比如:worker_processes 1;

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

第二部分:events块

比如events { worker_connections 1024; }

events块涉及到的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process 下的网络连接进行序列化,是否允许同时接受多个网络连接,选取那种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。

上述例子就表示每个work process支持的最大连接数是1024

这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。

第三部分:

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服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里

需要注意的是:http块也可以包括http全局块、server块。

http全局块

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

server块

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

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

而每个server块也分为全局server块,以及可以同时包含多个location块。

 1.全局server块

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

2.location块

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

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

如果uri包含正则表达式,则必须要有~或~*标识。

三、Nginx的原理

1.master和woker

nginx启动后,是由两个进程组成的。master(管理者)和woker(工作者)

一个nginx只有一个master,但是可以有多个worker。

过来的请求由master管理,woker进行争抢式的方式去获取请求。

2.master-workers机制的好处

首先,对于每个woker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便许多

可以使用nginx -s reload 热部署,利用nginx进行热部署操作

其次,采用独立的进程,互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则很快启动新的woker进程。当然,worker进程的异常退出,肯定是程序由bug,异常退出,会导致当前woker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

3.设置多少个woker

Nginx和redis类似都采用了io多路复用机制,每个woker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费CPU,设多了会造成cpu频繁切换上下文带来的损耗。

worker数和服务器的cpu数相等时最为适宜

4.连接数worker_connection

第一个:发送请求,占用了worker的几个连接数?

2或者4个

第二个:nginx有一个master,有四个worker,每个worker支持最大的连接数1024,支持的最大并发数是多少?

普通的静态访问最大并发数是:worker_connections  *  worker_process  /  2,

而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_process / 4

————————————————
版权声明:本文为CSDN博主「冯insist」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40036754/article/details/102463099

Nginx的简单理解相关推荐

  1. nginx配置文件简单理解(自用)

    upstream:可以设定我们要负载的上游服务器集群,并且指定负载的策略,默认轮询,可设置ip-hash,url-hash,权重等等. server-->server_name:指定访问的url ...

  2. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  3. linux管道简单理解

    什么是管道,怎么理解呢 管道(Pipeline),其实简单理解来看,管道的作用是在命令和命令之间,传递数据.比如说一个命令的结果,作为另一个命令的输入.命令其实就是进程.更准确地说,管道在进程间传递数 ...

  4. 项目架构相关知识的个人简单理解(水平有限,勿喷)

    (一)传统架构 一台Web应用服务器Tomcat并发量为400,如果当并发量为40000时,理论上需要100台: 同一个工程部署到多台服务器上就会存在两个问题: 问题1: 在Tomcat集群中节点数量 ...

  5. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  6. Nginx+Tomcat简单集群配置

    2019独角兽企业重金招聘Python工程师标准>>> 1.软件准备 下载Nginx和Tomcat Nginx:http://nginx.org/en/download.html 这 ...

  7. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  8. linux下安装两个nginx教程,在linux系统下安装两个nginx的简单方法

    在linux系统下安装两个nginx的简单方法 发布时间:2017-03-09 12:08 来源:互联网 当前栏目:web技术类 在linux下安装nginx的时候,一般在./configure的阶段 ...

  9. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

最新文章

  1. 动作捕捉技术,VR体验沉浸感的“助燃剂”
  2. AIX下RAC搭建 Oracle10G(一)检測系统环境
  3. 与股权投资有关的抵消分录的编制
  4. 日结问题解决思路和方式
  5. 中one_Chair_One 一号椅
  6. UART接口算法移植加密芯片的调试技巧——算法调试
  7. 【LeetCode】168. Excel Sheet Column Title 解题小结
  8. leetcode(128)最长连续序列
  9. 暗黑2魔电西格玛攻略_听说你想刷爆怪物的狗头?或许可以试试《暗黑破坏神》类单机手游...
  10. length与length()
  11. python人口普查数据数据分析_美国人口普查数据可视化探索和收入水平预测建模...
  12. 网吧网吧无盘服务器配置,网吧无盘服务器配置杂谈
  13. linux内核的裁剪与移植
  14. 「ZigBee模块」协议栈-串口透传,打造无线串口模块
  15. 利用selenium获取接口数据
  16. 伟大的民族英雄霍去病
  17. Kong Dashboard系列【三】添加插件----rate-limiting
  18. (面试)Springboot的启动流程
  19. 计算python程序运行时长,并以时分秒形式输出
  20. 已拦截跨源请求:同源策略禁止读取位于 http://localhost:8202/admin/cmn/dict/findChildData/1 的远程资源。(原因:CORS 头缺少 ‘Access-C

热门文章

  1. 从浏览器地址栏输入url到请求返回发生了什么(深问)
  2. 人生没有太晚的开始,只有不开始
  3. Unity Android通过拍照和相册上传头像(图片)
  4. 计算机控制技术曹立学答案,计算机控制技术(曹立学)
  5. cocos2dx 物理引擎chipmunk
  6. 华为odjava机试题_华为OD机试 :找终点
  7. Super含2021年度总结
  8. python3结果窗口打开_python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法...
  9. [附源码]Node.js计算机毕业设计大众点评管理系统Express
  10. PPT封面反转镂空文字