Nginx 高频面试题汇总
1. 什么是Nginx ?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
2. 什么是正向代理?
客户端请求目标服务之间的一个代理服务器。
请求会先经过这个代理服务器,然后在转发请求到目标服务器。获得内容后在响应给客户端。
3. 什么是反向代理?
用户请求目标服务器,由代理服务器决定访问哪个ip。
类比:你去学校报名上学,由教务指派你去哪个班级读书。
4. 反向代理路由图
5. Nginx 进程模型
当Nginx 启动后,默认会启动两个进程。
1.Master 进程
2.Work 进程
5.1 如何修改worker 进程数?
在 conf/nginx.conf 文件中修改 worker_processes 数字即可。
5.2 Nginx 基本命令有哪些?
./nginx -s stop
./nginx -s quit
./nginx -s reload
./nginx
./nginx -t
5.3 Nginx进程模型图
6. Nginx 抢占机制
6.1 传统服务器事件处理
同步阻塞请求方式,当一个client 阻塞后,后续其他client无法进行处理。
解决方式:重新fork 一个新的worker进程。使得阻塞client走新的worker 进程处理。
弊端:资源开销大,成本高!
6.2 Nginx事件处理
使用异步非阻塞模式(类似多路复用器)。
在Linux 环境中使用 epoll 模型,来处理工作进程。能处理6-8万个请求。
6.3 Nginx.conf 配置结构
main #全局配置event #配置工作模式以及连接数http #http模块相关配置server #虚拟主机配置,可以有多个location #路由规则,表达式upstream #集群,内网服务器
6.4 同步与异步,阻塞与非阻塞
6.4.1 同步(客户端)阻塞(服务器)
客户端发送请求给服务端,此时服务端处理任务时间久,则客户端被服务端阻塞,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不会接受其他客户端的请求,这种通信机制比较简单粗暴,但是效率不高。
6.4.2 同步(客户端)非阻塞(服务器)
客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会回来处理原先的。这种方式很高效,一个服务端可以处理很多请求,不会在因为任务没有处理完而堵着,所以这是非阻塞的。
6.4.3 异步(客户端)阻塞(服务器)
客户端发送请求给服务端,此时服务端处理任务的时间很久,但是客户端不会等待服务器响应,它可以做其他的任务,等服务器处理完毕后再把响应结果返回客户端,客户端得到回调后在处理服务端的响应,这种方式可以避免客户端一直处于等待状态,优化了用户体验,其实就是类似于网页里面的ajax异步请求。
6.4.4 异步(客户端)非阻塞(服务器)
客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候的任务虽然处理时间会很久,但是客户端可以做其他的任务,因为他是异步的,可以在回调函数里处理响应,同时服务端是非阻塞的,所以服务端可以去处理其他的任务,此时,这个模式就显得非常的高效
6.5 使用Gzip压缩提升请求效率
6.6 Nginx的模块化设计解析
6.7 Nginx的集群负载均衡解析
7.Nginx 中 uptream 指令参数
max_conns:最大连接数。
举例:当前有10个请求数
server1 :192.168.117.129:8080 max_conns=2;
server2 :192.168.117.130:8080 max_conns=3;
server3 :192.168.117.131:8080 max_conns=4;结果:
server1最多处理2个,
server2最多处理3个,
server3最多处理4个,
还有剩余的一个请求将会报错,502 。
只有当server处理完成当前的请求,才会重新处理新的请求。
slow_start:慢增长。必须使用于集群,不能单独使用。
举例:
server1 :192.168.117.129:8080 weight=6 slow_start=60s;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:server1的权重,将会从在60s的时间内从0-6;
down:不会被访问到。
server1 :192.168.117.129:8080 down;
说明:server1 是不会访问到。
backup:备用机。
举例:
server1 :192.168.117.129:8080 backup;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:正常情况下不会被访问到,当其他机器挂掉后,方可访问。
max_fails:最大失败次数,到达失败次数,则认为该服务器宕机。请求将不会访问到这台机器上。默认为1
fails_timeout:失败时间段,默认10s
举例:
server1 :192.168.117.129:8080 max_fails=2 fails_timeout=15s;
server2 :192.168.117.130:8080 weight=2;
server3 :192.168.117.131:8080 weight=2;
说明:15s内请求server1失败达到2次,认为server1已经宕机,再过15s,这15s内,不会有请求到这台机器上,而是会请求到其他正常的机器上,15s后,在请求到server1上,如果还是失败,则继续重复上述过程,直到恢复。
8.upstream 中设置keepalive 的作用?
提高系统的吞吐量
9. ip_hash 负载均衡
根据用户的请求的IP ,经过hash算法,得到一个特定的值,根据这个值判断该请求落在那个server 服务器下,相同的IP请求的会话,只会打在同一台服务器上。
公式 hash%node_counts(服务器结点数) = index
举例:
PS: 如果通过IP地址使用这个Hash 算法,它只会hash ip 地址的前三段 例如192.168.1。
重点:如果想要移除集群里的一台机器,就需要在节点后面加上down,而不是直接注释或者删除掉,因为直接删除的话,之前ip_hash 中的算法就需要重新计算,会话,缓存都会失效
9.1hash 算法带来的问题
如果有服务器减少或者增加,所有请求的hash都需要重新计算。导致请求的时间增加。
解决方式:采用一致性hash算法。
10 Nginx 浏览器缓存
10.1 expires 指令
expires [time] :设置过期时间
举例:expires 10s 每当请求后10s 缓存过期
expires @[time] : 设置具体缓存过期时间
举例:expires @22h40m 每天 22点40分,缓存失效
expires -[time] :设置已经过期时间
举例:expires -2h 缓存已经过期两小时
expires epoch 不使用缓存
expires off 默认关闭缓存。
expires max 最大时间缓存
11 Nginx反向代理缓存
proxy_cache_path 设置缓存保存目录
keys_zone 设置共享内存以及占用的空间
max_size 设置缓存大小
inactive 超过此时间,则缓存自动清理。
use_temp_path 关闭临时目录
proxy_cache_path /usr/local/nginx/upstream_cache
keys_zone=mycache:5m (mycache为名字,随意设置)
max_size=5g
inactive=30s 当我们的缓存超过30秒,就自动清理
use_temp_path off ;
继续配置,在server{#开启缓存
proxy_cache mycache;
#针对200 和 304 状态码缓存过期时间为5小时
proxy_cache_valid 200 304 5h;
}
Nginx 高频面试题汇总相关推荐
- 超经典,阿里巴巴历年高频面试题汇总:前端岗
这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 本系列历史文章: 阿里巴巴历年经典面试题汇总:Java岗 学姐百度实习面经 学姐,来挑战字节最牛部门 最强阿里巴巴 ...
- Redis高频面试题汇总(2021最新版)
本文已收录于专栏 ⭐️<Redis面试题汇总--2021最新版本>⭐️ 上千人点赞收藏,全套Redis高频面试题,大厂必备技能! 面试官心理分析 从面试官的角度分析,出这道题的目的 ...
- 【网络协议】专题总结以及网络协议高频面试题汇总(8篇)
这是一份超详细的HTTP协议攻略,内容大纲如下: 内容如下(点击即可跳转): 一篇文章带你详解 HTTP 协议(上) 一篇文章带你详解 HTTP 协议之报文首部及字段详解(中) 一篇文章带你详解 HT ...
- Java高频面试题汇总(2022)
Java 1. ArrayList和LinkedList的区别 Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的. Array获取数据的时间复杂度是O(1 ...
- 【运维面试】2020年9月最新运维高频面试题汇总
前言 关于运维面试的高频问题,在后续还会继续补充,面试是一次综合能力的考察,不仅仅需要你的技术过关,还需要考察你的沟通能力,抗压能力,以及职场习惯. 职场习惯中又包括: 是否守规矩,是否合群,是否有担 ...
- 大数据技术高频面试题汇总
一.Hadoop 1.Hadoop相关问题汇总 Hadoop默认不支持LZO压缩,如果需要支持LZO压缩,需要添加jar包,并在hadoop的cores-site.xml文件中添加相关压缩配置: Ha ...
- 【面试题】2021年PHP高频面试题汇总
1.get,post 的区别 1.GET在浏览器回退时是无害的,而POST会再次提交请求. 2.GET产生的URL地址可以被Bookmark,而POST不可以. 3.GET请求会被浏览器主动cache ...
- java instanceof用法_Java基础高频面试题汇总(1.4W字详细解析)
注:由于公众号文章推送规则的改变,所以为了大家能够准时收到我们的文章推送,请记得将公众号:JAVA编程语言 设为星标-这样就不会错过每一篇精彩的推送啦~ 1. Java语言有哪些特点 (1)简单易学. ...
- elasticsearch java对象 驼峰原则_2020年Java基础高频面试题汇总(1.4W字详细解析)...
1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...
最新文章
- SAP零售行业解决方案初阶 1
- 802.1AE保护局域网安全
- linux终端传文件,如何使用Linux FTP命令传输文件
- Python之——遇到的小知识点总结
- acdream 1023 xor按位思考
- FileInputStream
- Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)
- codevs3143 二叉树的序遍历
- Java数组--数组常用的办法;
- 设计模式 (十六) 命令模式
- pillow 保存图像路径_python利用pillow包处理图片
- ubuntu 安装 tree 命令
- Window10 ie自带浏览器下载乱码
- Android基础学习笔记14:安卓手势编程
- 计算机价格谈判议程,谈判议程
- 【Excel】之数据透视表及动态图表
- 楼氏电子推出Raspberry Pi 开发工具包,为新物联网应用和行业语音整合提供支持
- python实现AES对文件加解密(这里使用ECB密码本模式)
- 数据扩充与数据预处理
- GDAL ogr2ogr 转换mif 为sqlite
热门文章
- IU酒店逆势突围增长,9月酒店品牌影响力(MBI)提升至20位!
- QQ在线人数统计图数据解析
- THREE.JS镜头随鼠标晃动效果
- 【转】2018最新csdn修改博客皮肤模板教程
- SQL SERVER版本补丁体系及升级
- 计算机数据存储的变迁,【IT产业20年变迁】从0到1的二进制世界,存储设备20年发展历程...
- GIT新建分支后idea如何拉取新分支到本地
- Python 链表反转
- c语言程序二级模拟试卷,C语言程序设计二级考试模拟题集.doc
- 服务器能识别手机型号,iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P