文章目录

  • 一 Nginx介绍:
    • Nginx优点:
    • Nginx的Master-Worker模式:
    • Nginx热部署:
    • Nginx如何做到高并发下的高效处理:
    • Nginx如何实现高可用:
  • 二 通过配置文件实现Nginx主要功能:
    • 反向代理:
    • 负载均衡:
    • 动静分离:
    • 其他功能
  • 三 NGINX常用版本:

一 Nginx介绍:

Nginx是一款轻量级的Web服务器、反向代理器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

Nginx优点:

高并发连接: 官方称单节点支持5万并发连接数,实际生产环境能够承受2-3万并发。
内存消耗少: 在3万并发连接下,开启10个nginx进程仅消耗150M内存 (15M×10=150M)
配置简单
成本低廉: 开源免费

Nginx的Master-Worker模式:


启动Nginx后,其实就是在80端口启动了Socket服务进行监听,Nginx涉及Master进程和Worker进程。
Master进程的作用是?
读取并验证配置文件 nginx.conf;管理worker进程
Worker进程的作用是?
每一个Worker进程都维护一个线程,避免线程切换,用来处理连接和请求;Worker进程的个数可以在配置文件中设置,一般和CPU个数相关,有利于进程切换。

Nginx热部署:

修改配置文件后,master进程读取并更新配置,同时基于新的配置重新生成新的worker进程,以新的配置进行处理请求,而且新的请求必须都交给新的worker进程。至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。

Nginx如何做到高并发下的高效处理:

一、Nginx的worker进程个数与CPU绑定、worker进程内部包含一个线程高效回环处理请求。
二、采用了Linux的epoll模型,epoll模型基于事件驱动机制,采用异步回调。IO是比较耗时的过程,采用异步IO减少等待时间,同时监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,worker只需从epoll队列中循环处理事件即可。

注:事件驱动机制首先会注册事件以及事件处理函数,并维护一个事件对列,每收到一个请求,放入事件队列,让主进程通过非阻塞I/O方式循环处理队列中的事件。
事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环(事件对列),当外部事件发生时使用回调机制来触发相应的处理。事件驱动模型大体思路如下:
有一个事件队列(消息队列),某个事件触发时,往这个队列中增加一个事件;
有个循环,不断从队列中取出事件,根据不同的事件,调用不同的函数。

第一代事件驱动模型把通信层剥离出来,用事件驱动的形式取代多线程,但是在业务逻辑层仍然采用多线程模型。
第二代事件驱动模型把业务逻辑也变成事件驱动,彻底消除浪费线程等待IO这个现象。
事件驱动有两件常见的外衣,一件是异步回调,另一件是coroutine。

Nginx如何实现高可用:

Keepalived+Nginx实现高可用。高可用-keepalived组件、Keepalived
Keepalived是一个高可用解决方案,主要是用来防止服务器单点发生故障,可以通过和Nginx配合来实现Web服务的高可用。
Keepalived+Nginx实现高可用的思路:
第一:请求不要直接打到Nginx上,应该先通过Keepalived,这就是所谓虚拟IP,VIP
第二:Keepalived监控Nginx的生命状态。提供一个用户自定义的脚本,定期检查Nginx进程状态,从而实现Nginx故障切换。

二 通过配置文件实现Nginx主要功能:

反向代理:

代理操作:被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程。

正向代理:正向代理 代理的是客户端,处理来自客户端的出站请求。例如某站点作为网络代理去访问某外部服务器,客户端知道访问的服务端地址,而服务端是不知道客户端如何访问的。
反向代理:反向代理 代理的是服务端,处理来自Internet的入站请求。例如外网访问淘宝时,反向代理服务器会进行一次转发,代理到内网中,再分配给具体的某个服务器处理请求。而这一过程对于客户端而言是透明的,访问者并不知道自己访问的是一个代理,同时客户端不需要任何配置就可以访问,反向代理隐藏了服务器的信息。
此时,请求的来源(客户端)是明确的,但是请求具体由哪台服务器处理的并不明确了。

在配置文件中实现反向代理,将location这一段配置中的root替换成proxy_pass即可,即被代理服务器的地址。root说明是静态资源,可以由Nginx进行返回;而proxy_pass说明是动态请求,需要进行转发。
反向代理的过程对于客户端是透明的,比如Nginx代理Tomcat,request -> Nginx -> Tomcat,那么对于Tomcat而言,请求的IP地址就是Nginx的地址,而非真实的request地址。
反向代理的作用:
保证内网的安全,通常将反向代理作为公网访问地址,处理真实业务的Web 服务器是内网。
负载均衡,通过反向代理服务器来优化网站的负载。

负载均衡:

上面的反向代理中,我们通过proxy_pass来指定Tomcat的地址,很显然我们只能指定一台Tomcat地址,如何指定多台Tomcat服务器来达到负载均衡。
第一,通过upstream来定义一组服务器,并指定负载均衡策略,健康检查策略等。
第二,将proxy_pass替换成upstream指定的值即可。
需要注意:由于无法确定某一请求会由哪个服务器处理,因此需要解决用户状态的保存问题。

负载均衡策略:请求数量按照一定的规则进行分发,到不同的服务器处理的规则。如下三种:
1 加权轮询:给每台后端服务器设置一个权重值,用于调整不同的服务器上请求的分配率。权重越大,被分配到请求的几率越大。
2 IPHASH:对客户端ip地址和哈希函数计算哈希值,分配到负责某个hash段的服务器,确保固定 ip 地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下Session共享的问题。
3 最小连接:下一个请求将发往最少活动连接的服务器

http {upstream myapp1 {server ip1;server ip2;server ip3;}server {listen 80;server_name localhost;location / {proxy_pass http://myapp1;}}
}

动静分离:

把Nginx作为Web服务器,管理静态资源,处理静态请求,而动态请求转发给后端,实现动静分离。
把Nginx作为web server来处理静态资源:
第一:location可以进行正则匹配,应该注意正则的几种形式以及优先级。
第二:Nginx能够提高速度的其中一个特性就是:动静分离。
第三:我们可以在Nginx下把静态资源、日志文件归属到不同域名下,方便管理维护。
第四:Nginx可以进行IP访问控制,在Nginx这一层内置一个黑名单模块,那么就不必等请求通过Nginx达到后端在进行拦截,而是直接在Nginx这一层就处理掉。
基于前后端分离概念,前端可以自行开发、测试,使用Nginx形成静态资源服务器,后端服务仅作为附加资源。
下面的例子表明 静态资源在/usr/share/nginx/html, 动态资源路径包含api或swagger。

  #配置被代理的后端服务器upstream eap_website {server ip1;server ip2;server ip3;}server {listen  80;location / {            # 使用root 访问静态资源root /usr/share/nginx/html;index index.html index.htm;try_files $uri /index.html;}location ^~ /api/  {     # 使用proxy_pass 访问动态资源,proxy_pass         http://eap_website/api/;}location ^~ /swagger/  {    # 动态资源proxy_pass         http://eap_website/swagger/;}}

其他功能

1、通过端口支持,同一域名下多个webapp
2、绑定https证书(默认端口443)。
3、支持rewrite重写规则: 能够根据域名、url的不同,将http请求分发到后端不同的应用服务器节点上。
4、内置健康检查功能: 如果后端的某台应用节点挂了,请求不会再转发给这个节点,不影响线上功能。
关键指令: max_fails, fail_timeout
5、节省带宽: 支持gzip压缩。
6. 解决跨域问题:
反向代理方案: 在原尝试跨域的站点上搭建同域nginx,由该nginx转发原跨域请求,这种是在原站点操作。
增加CORS响应头 ,根据CORs方案,在被请求站点操作。

三 NGINX常用版本:

Nginx开源版(三大功能:Web服务器 反向代理服务器 负载均衡器)
http://nginx.org/

OpenResty(适合二次开发)
http://openresty.org/cn/

Tengine(高效好用的Nginx)
http://tengine.taobao.org/

Nginx plus 商业版
https://www.nginx.com

参考:
https://zhuanlan.zhihu.com/p/34943332 8分钟带你深入浅出搞懂Nginx
https://zhuanlan.zhihu.com/p/356001849 鹅厂二面,nginx回忆录(有功能的配置示例)
https://www.bilibili.com/video/BV1yS4y1N76R(视频教程)
https://www.nginx.cn/doc/(官方中文文档)

分布式(三)Nginx服务器相关推荐

  1. Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器

    Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...

  2. 分布式项目-Nginx安装(反向代理)

    可以根据parent_id来查询分类的列表 服务器上的图片是如果管理的? 1.如果是分布式环境引用会存在问题 2.图片的下载也会给服务器增加压力 3.如果存在高并发的话,就需要增加tomcat服务器, ...

  3. 商城项目笔记一:搭建Maven工程,利用Dubbo实现SOA面向服务框架,部署zookeeper注册中心,FastDFS框架实现图片上传,部署nginx服务器。

    文章目录 1. 商城项目总结笔记: 1.1. 第一天工作记录:搭建Maven工程 1.2. 第二天工作记录:创建SOA面向服务架构,通过工具类实现分页技术 1.3. 第三天工作记录:部署nginx服务 ...

  4. 搭建nginx服务器及文件的配置

    一.搭建nginx服务器及平滑升级 1.搭建基本的nginx服务器 准备nginx-0.8和nginx-1.0两个源码包 [root@localhost nginx-package]# tar -zx ...

  5. liunx服务(Nginx服务器 web服务器源码包和rpm 服务平滑升级)

    Nginx服务器 和apache服务器是同样的功能都是发布网页web的但是不同的是功能上有些不同各有各的好处. Nginx服务器 开始安装 确认包安装 yum install pcre-devel o ...

  6. Nginx 之五: Nginx服务器的负载均衡、缓存与动静分离功能

    一.负载均衡: 通过反向代理客户端的请求到一个服务器群组,通过某种算法,将客户端的请求按照自定义的有规律的一种调度调度给后端服务器. Nginx的负载均衡使用upstream定义服务器组,后面跟着组名 ...

  7. Nginx服务器上安装并配置PHPMyAdmin的教程

    这篇文章主要介绍了Nginx服务器上安装并配置PHPMyAdmin的教程,附带一条PHPMyAdmin加载慢的解决方法:)需要的朋友可以参考下 一. 准备工作: 如果mysql的root账号为空,需要 ...

  8. 部署支持php和Redis的Nginx服务器

    一.安装并配置Nginx服务器 - 在nginx1(192.168.1.10)上安装nginx # 安装编译器 [root@nginx1 ~]# yum install -y gcc pcre-dev ...

  9. 浅谈Nginx服务器的内部核心架构设计

    前言 Nginx 是一个 免费的,开源的,高性能 的 HTTP 服务器和 反向代理,以及 IMAP / POP3 代理服务器. Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名 ...

最新文章

  1. 8月12笔记-安卓文件扫描
  2. 一个关于小程序Iot的具体实现(MQTT版)
  3. Keras创建者深度思考:不要将AI作为操纵用户的工具
  4. pyinstaller 'utf-8' codec can't decode byte 0xce in position 123: invalid continuation byte
  5. 最小二乘多项式拟合程序matlab,最小二乘法的多项式拟合(matlab实现)
  6. 我是这样开始学编程的
  7. 关于__attribute__ ((packed))
  8. Docker学习总结(33)——Docker环境下搭建 MySQL 主从复制
  9. IIS设置HTTP To HTTPS
  10. 自回归模型(AR Model)
  11. JS实现复制到剪贴板功能
  12. html 倒计时 插件,jQuery倒计时插件leftTime.js
  13. 2021-03-12
  14. Windows上的安全模式
  15. 亚马逊运营面试经验分享:避免踩坑,少走弯路
  16. mac 如何快速生成SSH key,配置github SSH公钥连接(解决git push 413问题)
  17. 2-3树与2-3-4树
  18. 大数据开发好找工作么?还能入行么?
  19. appium学习笔记
  20. 两位前阿里 P10 的成长经历的启发

热门文章

  1. php ues导入,php中同时使用多个use导入命名空间时的问题
  2. Facebook 究竟是怎么抄袭 Snapchat 的?
  3. azure搭建php,使用Azure部署免费的WordPress博客
  4. 文件恢复+html乱码怎么办,数据恢复的文件乱码,怎么办?
  5. 客服系统-可以多个客服同时在线(支持网页端与软件)内附搭建教程
  6. 游戏原画角色设计基本功有哪些?
  7. MATLAB转C语言的步骤与解决方案
  8. Taipei-Torrent使用
  9. 明景移动式视频智能摘要检索分析系统
  10. 不同的AI视频推理场景下,如何构建通用高效的抽帧工具?