前天二面鹅厂,面试官问出了“nginx你了解吗?”这样宽泛直白的句式,我一时抓不到重点,一时语噻。

下班想了一下,平时潜移默化用到不少nginx的能力,但在面试的时候没有吹成对应的概念。

面谈nginx核心能力#

nginx是老牌web服务器,以下口水话的nginx基础能力,大家都耳熟能详,看看就行,面试官也不打算考查这个。

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

1. 正向、反向代理#

所谓“代理”,是指在内网边缘 设置一个硬件/软件转发请求;
“正向”还是“反向”的说法,取决于转发的是"出站请求"还是"入站请求".

正向代理:处理来自客户端的出站请求,将其转发到Internet,然后将生成的响应返回给客户端。
反向代理:处理来自Internet的入站请求,将其转发给后端工作程序,然后将响应返回给Internet。

  1. 正向代理和反向代理 在代理的方向上不同,但都会代理处理HTTP请求/响应。
  2. 代理服务器存在的目的:
  • 堡垒机/隔离内网: 内网客户端无法访问外网需要设置堡垒机、隐藏内网工作服务器
  • 代理服务器附加功能: 对流量执行操作、使用缓存或压缩来提高性能、防御攻击并过滤信息

2. 负载均衡#

负载均衡一般伴随着反向代理, 起到了 分配流量、透明代理、 增强容错的效果

http {upstream myapp1 {server srv1.example.com;server srv2.example.com;server srv3.example.com;}server {listen 80;location / {proxy_pass http://myapp1;}}
}

早期我们的核心产品部署在两台windows Sever IIS上,前面部署了一个nginx,做了负载均衡。

很明显,这里有个[负载均衡策略]的知识点。

  • round-robin 顾名思义:轮询
  • least-connected : 下一个请求将发往最小活动链接的服务器
  • ip-hash: 根据客户端的ip地址和哈希函数 决定将请求发往哪个服务器
    http://nginx.org/en/docs/http/load_balancing.html

✨ 延伸技能点:

  1. [服务发现]:在容器/K8S环境,服务地址是由集群系统动态分配,一般都内置了服务发现能力,docker-comppose/K8s中定义的服务名就代表了整个服务。
    有个文章讲述了: 《巧用nginx 实现Docker-Comppose服务多实例》
  2. [会话亲和力]:又叫“粘性会话”,确保在有状态的应用中,同一客户端的请求打到后端一个服务器上。
    也有个示例可参考:《巧用会话亲和力做图片上传和预览》

3. 动静分离#

动静分离与现在火热的前后端分离概念火热相关,

前端可以自行开发、测试,自行使用nginx形成静态资源服务器,后端服务仅作为附加资源。

下面的例子表明 静态资源在/usr/share/nginx/html, 动态资源路径包含api或swagger。

  upstream eap_website {server eapwebsite;}server {listen      80;location / {            # 静态资源root /usr/share/nginx/html;index index.html index.htm;try_files $uri /index.html;}location ^~ /api/  {     # 动态资源proxy_pass         http://eap_website/api/;}location ^~ /swagger/  {    # 动态资源proxy_pass         http://eap_website/swagger/;}}

✨ 延伸技能点

  1. 以上流程也是《现代十二要素应用方法论》所推崇的第四点, 从这个体系来说,后端沦落为api开发,实属遗憾
  2. 这里有个《有关在容器生成阶段动态插入api基地址的妙招》,对动静分离的容器化很有裨益。

实用功能#

  1. 通过端口支持 同一域名下多个webapp
  2. 绑定Https证书1、2点一起体现:一个域名绑定到443和8080端口两个https站点
 upstream receiver_server {server receiver:80;}upstream app_server {server app:80;}server {listen       443 ssl http2;server_name  eqid.gridsum.com;ssl_certificate         /conf.crt/live/gridsum.com.crt;ssl_certificate_key     /conf.crt/live/gridsum.com.key;location / {proxy_pass         http://receiver_server/;}}server {listen 8080 ssl http2;server_name             eqid.gridsum.com:8080;ssl_certificate         /conf.crt/live/gridsum.com.crt;ssl_certificate_key     /conf.crt/live/gridsum.com.key;location / {proxy_pass         http://app_server/;}}
  1. 支持rewrite重写规则: 能够根据域名、url的不同,将http请求分发到后端不同的应用服务器节点上。
  2. 内置健康检查功能: 如果后端的某一应用节点挂了,请求不会再转发给这个节点,不影响线上功能。
    关键指令: max_fails, fail_timeout
upstream backend {server backend1.example.com weight=5;server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;server unix:/tmp/backend3;server backup1.example.com  backup;
}
  1. 节省带宽: 支持gzip压缩
  2. 解决跨域问题
    ① 反向代理② 增加CORS响应头5、6点一起体现: 在前后端分离项目,对跨域请求增加CORS响应头、对静态资源开启gzip压缩
   location / {gzip on;gzip_types application/javascript text/css image/jpeg;root /usr/share/nginx/html;index index.html index.htm;try_files $uri /index.html;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';add_header 'Access-Control-Allow-Headers' 'Content-Type';add_header 'Access-Control-Allow-Credentials' 'true';}

要进大厂, 技术栈要向舒适区以外拓展, 大厂人员大都具备多技能, 随插随用。

基础知识牢固,才会融会贯通,更快解锁高难度姿势。

鹅厂二面大概率挂了,实践没吹成概念,且行且分享。

一时语噻:二面鹅厂,面试官问出Nginx你了解吗?相关推荐

  1. java runtime ssh 后执行指令_酒后系列:被某厂面试官吊打后酒后整理的JVM干货

    为什么要写这么一篇文章呢,因为很基础,很基础,很基础,重要的事情说三遍!!!哼,还不是因为面试的时候经常会被问到,哈哈哈哈哈 ,为此我静下心来,狠心写下了这一篇文章,好去对付一般的面试官,也可以帮助你 ...

  2. 二面京东,面试官直接问我JVM,我心里一阵暗爽~

    二面京东,面试官直接问我JVM,我心里一阵暗爽~简直了,hhhh 明人不说暗话,直接进入主题!!! 一.什么是JVM 二.JAVA代码编译和执行过程 类加载机制 类执行机制 三.JVM内存管理和垃圾回 ...

  3. 在鹅厂面试5轮后扑街!微服务架构,我拿什么拯救你!

    上周五接到朋友的电话,此前他一路披荆斩棘,离鹅厂Offer大概仅一步之遥.电话一接通我就说了一通让他请客吃饭的话,对面沉默了几秒钟,淡淡地说了句 "我终面没过...." 这让我一时 ...

  4. Android渣本毕业四年,面试小厂面试官说我可以试试大厂

    从6月初开始复习,准备面试题.首先介绍一下自己基本情况:渣本毕业快4年,一直在小厂摸鱼混日子,学历和简历背景不是很好看,所以面试邀约也不是很多,面试也到处碰壁. 去年跳槽不成功,在原公司又呆了一年.一 ...

  5. 面试官问出这几道算法题,你能扛住么?

    写在前面 CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:前端面试宝典 话 ...

  6. 腾讯CSIG移动客户端二面(钟面试官)

    CSIG二面 1.自我介绍 2.谈到项目 3.项目优化,提出各种问题,比如Socket通信的消息的报文有缺失或者增多,不符合规定的格式,如何解决. 4.视频传输的优化,视频压缩算法. 5.http和h ...

  7. 面经整理——(百度美团鹅厂网易等)

    百度 一面 算法题: 手写快排.单例模式.死锁 1 介绍下RPC 2 看过Dubbo源码是吧? 说下dubbo怎么区分不同的服务? 怎么服务降级? 负载均衡的方法?具体到每种的原理.源码级别 服务端没 ...

  8. 【鹅厂手游安全部门电话一面】

    第一次与手游安全的碰撞 本来暑假最后一个星期在灾区(天门)玩耍,突然收到了鹅厂面试官(猎头)的一个电话.我开始以为是诈骗(想到最近不是诈骗大学生的事比较多-) 自己也是第一次接触手游安全,以前看别人玩 ...

  9. 鹅厂二面,Nginx回忆录

    上周二面鹅厂,面试官问出了"nginx你了解吗?"这样宽泛直白的句式,我一时抓不到重点,一时语噻. 下班想了一下,平时潜移默化用到不少nginx的能力,但在面试的时候没有吹成对应的 ...

最新文章

  1. Linux虚拟机 百度云 监控,使用Shell脚本监控KVM虚拟机
  2. php网站开发期末大作业,大学生期末网页大作业
  3. 数学天桥之中值定理|北京有文化的天桥
  4. 看生物信息学如何聚焦特定表型,探索分子机制,促进临床转化
  5. IOS代理的设计模式
  6. Silverlight进度条控件动画源代码
  7. 在安卓上运行 TensorFlow:让深度学习进入移动端
  8. CSE-CIC-IDS 2018数据集下载
  9. 静态成员对比实例成员(static修饰符解析)
  10. python手机版做小游戏代码大全-12岁的少年教你用Python做小游戏
  11. Sentaurus入门(2):器件仿真
  12. 动态独享代理ip的简介。
  13. eclipse配置--代码提示、xml提示
  14. unity旗帜飘动shader
  15. Java笔试题(二)多选题
  16. Unity 5.6正式版发布,Unity 2017即将来临
  17. matlab三维数据切片二维
  18. 翻译|《Word Power Made Easy》(vii~xii)
  19. 淘宝画报首页,看图购物非常靠谱!
  20. allegro 元件封装设计学习

热门文章

  1. 【渝粤题库】广东开放大学 市场调查与预测 形成性考核
  2. 小程序转uni-app——动态转换样式
  3. linux关机suspending,(转)Linux 休眠原理与实现
  4. ES6中展开运算符的深拷贝浅拷贝理解(ElementUI表格点击编辑,模态框内容与表格数据一起变的问题)
  5. 开发者痛斥手机供应商为了续航恶意查杀后台应用
  6. Python升级之路( Lv9 ) 文件操作
  7. OpenCV图像各向异性滤波
  8. matlab光子晶体求反射率,一维光子晶体禁带结构的MATLAB分析计算讲解.PDF
  9. 小福利,python内置map函数和lambda函数运用
  10. 数据结构--基本概念