Nginx的作用

这个问题是入门级知识点,讨论Nginx的用处。我觉得只要几个重要的点都回答到位就可以了,可以考虑这样的一个回答:Nginx是一个高性能web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。不仅可以实现负载均衡,还可以做接口限流,缓存等功能。

使用Nginx的优势点

  1. Nginx 由于使用了epollkqueue网路I/O模型,在实际生产环境能够支撑3万左右并发连接。

  2. Nginx 内存消耗低。

  3. Nginx 跨平台,而且配置相对来说难度较低。

  4. Nginx 内置健康检查功能,如果负载均衡其中一个服务器宕机了,则接受到的请求会发送给其他服务器去处理。

  5. 支持Gzip压缩,可以添加浏览器本地缓存的Header头。

  6. Nginx 支持热部署,可以在不间断服务的情况下平滑进行配置的更改。

  7. Nginx 异步接收用户请求,减轻了Web服务器的压力。

Nginx如何实现高并发

这个问题出来可能懂一点Nginx的朋友们都是浮现出5个字异步非阻塞。实际上Nginx就是异步非阻塞,使用了epoll模型并对底层代码进行大幅度优化。之前其实有讲过Nginx是采用1master进程,多个worker进程的模式,每次接收到一个请求,master会将请求按照一定策略分发给一个worker进程去进行处理请求。worker进程数一般设置为和CPU核心数一致,异步非阻塞模式就会使得worker线程在等待请求callback的空闲时间可以接收处理新的请求,当接收到旧请求的callback时再回去继续处理该请求,这样就完成了少数几个worker进程却实现了高并发的问题。

Nginx为何不使用多线程?

众所周知,没创建一个新的线程,都需要为其分配cpu和内存。当然,创建进程也是一样,但是由于线程过多会导致内存消耗过多。所以Nginx采用单线程异步处理用户请求,这样不需要不断地为新的线程分配cpu和内存,减轻服务器内存消耗,所以使得Nginx性能方面更为高效。

Nginx如何处理请求?

Nginx启动后,首先进行配置文件的解析,解析成功会得到虚拟服务器的ip和端口号,在主进程master进程中创建socket,对addrreuse选项进行设置,并将socket绑定到对应的ip地址和端口并进行监听。然后创建子进程worker进程,当客户端和Nginx进行三次握手,则可以创建成功与Nginx的连接。当有新的请求进入时,空闲的worker进程会竞争,当某一个worker进程竞争成功,则会得到这个已经成功建立连接的socket,然后创建ngx_connection_t结构体,接下来设置读写事件处理函数并添加读写事件用来与客户端进行数据交换。当请求结束Nginx或者客户端主动关闭连接,此时一个请求处理完毕。

为什么要做动静分离?

在日常开发中,前端请求静态文件比如图片资源是不需要经过后端服务器的,但是调用API这些类型的就需要后端进行处理请求,所以为了提高对资源文件的响应速度,我们应该使用动静分离的策略去做架构。我们可以将静态文件放到Nginx中,将动态资源的请求转发到后端服务器去进行进一步的处理。

Nginx负载均衡的几种常用方式?

轮询方式:默认情况下Nginx使用轮询的方式实现负载均衡,每个新的请求按照时间顺序逐一分配到不同的后端服务器去进行处理,如果后端服务器宕机,则Nginx的健康检查功能会将这个后端服务器剔除。但是轮询方式是显而易见的:可靠性低而且负载分配不平衡,所以轮询方式更适用于图片服务器或者静态资源服务器。

weight:可以对不同的后端服务器设置不同的权重比例,这样可以改变不同后端服务器处理请求的比例。可以给性能更优的后端服务器配置更高的权重。

ip_hash:这种方式会根据请求的ip地址的hash结果分配后端服务器来处理请求,这样每个用户发起的请求固定只会由同一个后端服务器处理,这样可以解决session问题。

fail:这种方式有点类似于轮询方式,主要是根据后端服务器的响应时间来分配请求,响应时间短的后端服务器优先分配请求。

url_hash:这种方式是按照请求urlhash结果来将不同请求分配到不同服务器,使用这种方式每个url的请求都会由同一个后端服务器进行处理,后端服务器为缓存时效率会更高。

Session不同步如何处理?

上面其实提过了解决方案,负载均衡方式使用ip_hash方式,如果用户已经访问过某个后端器,则再次访问时会将这个请求的ip地址进行哈希算法转换,自动定位到该服务器。当然也可以通过redis缓存用户session,一样可以处理session不同步的问题。

Nginx常用优化配置

1. 调整worker_processes指定Nginx需要创建的worker进程数量,刚才有提到worker进程数一般设置为和CPU核心数一致。

2. 调整worker_connections设置Nginx最多可以同时服务的客户端数。结合worker_processes配置可以获得每秒可以服务的最大客户端数。

3. 启动gzip压缩,可以对文件大小进行压缩,减少了客户端http的传输带宽,可以大幅度提高页面的加载速度。

4. 启用缓存,如果请求静态资源,启用缓存是可以大幅度提升性能的。

Nginx正向代理

正向代理也是大家最常接触的到的代理模式,那究竟什么是正向代理呢?我们都知道Google在国内是无法正常访问的,但是某些时候我们由于技术问题需要去访问Google时,我们会先找到一个可以访问Google的代理服务器,我们将请求发送到代理服务器,代理服务器去访问Google,然后将访问到的数据返回给我们,这样的过程就是正向代理。正向代理最大的特点是客户端需要明确知道要访问的服务器地址,Google服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端,正向代理可以隐藏真实客户端的具体信息。

客户端必须设置正向代理服务器,而且需要知道正向代理服务器的IP地址以及代理程序的端口。一句话来概括就是正向代理代理的是客户端,是一个位于客户端和Google服务器之间的服务器,为了从Google服务器取得数据,客户端向代理服务器发送一个请求并指定目标(Google服务器),然后代理向原始服务器转交请求并将获得的数据返回给客户端。总结正向代理的几个作用:

访问国外无法访问的网站做缓存,加速访问资源对客户端访问授权,上网进行认证代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

Nginx反向代理

多个客户端给服务器发送的请求,Nginx服务器接收到请求以后,按照一定的规则转发到不同的服务器进行业务逻辑处理,也就是我们刚才讲到的负载均衡的策略。此时请求来源于哪个客户端是确定的,但是请求由哪台服务器处理的并不明确,Nginx扮演的就是一个反向代理角色。可以这样来理解,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。反向代理代理的是服务端,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。总结下反向代理的两个作用:

 

保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
负载均衡,通过反向代理服务器来优化网站的负载

Nginx中正向代理与反向代理的区别

在正向代理中,隐藏了请求来源的客户端信息;
在反向代理中,隐藏了请求具体处理的服务端信息

更多Nginx面试题关注+点赞,私信我获取全文!

Nginx面试题及基础相关推荐

  1. Nginx面试题(史上最全 + 持续更新)

    尼恩面试宝典专题39:Nginx面试题(史上最全.持续更新) 本文版本说明:V27 <尼恩面试宝典>升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼恩获取, 发送 ...

  2. Tomcat面试题+http面试题+Nginx面试题+常见面试题

    Tomcat面试题 1.Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Conn ...

  3. 安徽计算机应用基础高考试题,安徽省对口高考试题(计算机应用基础部分)

    安徽省对口高考试题(计算机应用基础部分) 一.填空题 1.按照计算机所采用的主要电子元件的不同来划分,计算机的发展历经了_____代.(2012A) 2.按计算机的用途分类,计算机分为专用机和____ ...

  4. java并发面试题(一)基础

    转载:http://ifeve.com/javaconcurrency-interview-questions-base/java并发面试题(一)基础 本文整理了常见的Java并发面试题,希望对大家面 ...

  5. 计算机基础八进制和十六进制试题,计算机基础知识考试试题

    计算机基础知识考试试题 计算机基础知识考试试题 一.选择题 1.计算机中数据的表示形式是(C )A)八进制B)十进制C)二进制D)十六进制 2.计算机硬件能直接识别和执行的只有(D )A)高级语言B) ...

  6. java面试题——java基础(四),java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  7. Android面试题Java基础篇

    Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech 系列文章目录: ...

  8. 聊城大学计算机应用基础,聊城大学试题计算机应用基础试题.doc

    聊城大学试题计算机应用基础试题 一.判断题(共10题,每题2分,共20分) 得分阅卷人 1.信息按状态划分可以划分为动态信息和静态信息.( √ ) 2.操作系统不具有通用性.( × ) 3.在Wind ...

  9. 计算机硬件知识试题,计算机硬件基础知识试题.doc

    计算机硬件基础知识试题.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 1.追常计易机的存储务兒山Cache, t存和維存剛f ...

  10. (更新时间)2021年5月15日 Nginx服务器 Nginx面试题

    Nginx面试题 1.什么是Nginx? Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理.负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用 ...

最新文章

  1. cocos 时间函数需要什么引用_2021国家公务员考试时间是什么时候 国考备考时间需要多久...
  2. 2017-10-5模拟赛T2 小Z爱排序(sorting.*)
  3. mysql打包备份数据到_thinkPHP使用pclzip打包备份mysql数据库的方法
  4. 织梦 mail.class.php,详解织梦模板DEDECMS核心类TypeLink.class.php功能分析
  5. pytorch —— 图像预处理模块(Transforms)
  6. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
  7. 《Git版本控制管理(第2版)》——4.3 Git在工作时的概念
  8. 马云背后的女人:原来淘宝、支付宝的名字都是她取的
  9. Sublime Text 3 Plugin Better!
  10. matlab常用误差分析绘图函数
  11. 斐波那契 —— 矩阵形式推导
  12. 去掉jsp页面自动生成的空行
  13. 易语言取CPU序列号特征字
  14. 如何修改安卓app图标和名称
  15. 氨基酸在php的溶液中,氨基酸等电点的计算和应用.ppt
  16. Android:获取当前的锁屏壁纸或桌面壁纸
  17. mysql 5.5.27_MySQL-5.5.27安装图解
  18. 《西部世界》在线观看与观后感
  19. My_blog个人博客系统
  20. 虚拟化技术的演变过程和KVM虚拟化的简介

热门文章

  1. 数据挖掘与python实践心得体会_数据挖掘心得体会
  2. P-SIF长文本表示方法
  3. python万年历代码_利用python实现万年历
  4. 手机通讯录html模板,手机通讯录导模板
  5. 一个游戏策划案(仅供参考)
  6. 黑色背景的DW代码配色方案 Colors.xml
  7. DirectX Repair v4.2.0.40217 最新2022全能运行库系统修复工具增强版
  8. Flash Builder 4.6 序列号
  9. csdn编辑器公式中插入空格
  10. Hbase 权威指南