上周二面鹅厂,面试官问出了“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

✨  延伸技能点:

① [服务发现]:

在容器/K8S环境,服务地址是由集群系统动态分配,一般都内置了服务发现能力,docker-comppose/K8s中定义的服务名就代表了整个服务。
有个文章讲述了: 《巧用nginx 实现Docker-Comppose服务多实例》

② [会话亲和力]:

又叫“粘性会话”,确保在有状态的应用中,同一客户端的请求打到后端一个服务器上。

也有个示例可参考:《巧用会话亲和力做图片预览上传》

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/;}}

✨ 延伸技能点

① 以上流程也是《现代十二要素应用方法论》所推崇的第四点, 从这个体系来说,后端沦落为api开发,实属遗憾

② 这里有个《有关在容器生成阶段动态插入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的实践,应该足够在下一次面试中吹水了,如有错误,请留言赐教。

鹅厂二面,Nginx回忆录相关推荐

  1. 一时语噻:二面鹅厂,面试官问出Nginx你了解吗?

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

  2. 【鹅厂手游安全的电话二面】

    #今天电话第二面,可能也是最后一面了吧. 今天下午在图书馆看书,然后收到了鹅厂二面电话,很多都答得不好.感觉录音不是很好.就没录.然后使劲回忆下问的问题吧. ##1.首先还是问我玩过哪些手游? 天天酷 ...

  3. 二黑告别了鹅厂,回去老家当富豪!

    关注我,每天分享软件测试技术干货.面试经验,想要领取测试资料.进入软件测试学习交流群的可以直接私信我哦~~ 昨天晚上,和老朋友二黑约了一块吃饭,他告诉我他要离开鹅厂了,也要离开深圳了!回来后,心情复杂 ...

  4. 鹅厂招人啦!限量内推码和面试直通卡!助你直拿Offer(内附岗位介绍)

    令人翘首以盼的鹅厂终于来招人啦!这次腾讯公司的领导们带来了超多岗位,可以说是非常有诚意了.无论你是哪个领域的人才,只要你有能力,这里就有你的一席之地. 当机会砸到你的头上,就一定要把握住哦!快点预约直 ...

  5. 面试鹅厂,我三面被虐的体无完肤。。。

    作者:codegoose https://segmentfault.com/a/1190000017864721 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次 ...

  6. 百万奖池,鹅厂offer,2020腾讯广告算法大赛等你来战!

    允中 发自 凹非寺  量子位 编辑 | 公众号 QbitAI 2020腾讯广告算法大赛再度起航,即日起至5月31日,赛事正式面向全社会启动线上招募,一场算法之间的"巅峰对决"即将上 ...

  7. 腾讯数据中心负责人揭秘:半年时间如何搭好“山洞鹅厂”

    新华网贵阳5月30日电(记者向定杰)2018中国国际大数据产业博览会期间,腾讯贵安七星数据中心掀开神秘面纱,一期正式投入试运行. ↑5月22日无人机航拍的腾讯七星数据中心.该中心总占地面积七百多亩,隧 ...

  8. 【经验分享】鹅厂机器学习岗暑期实习面经总结

    作者 | 空 学校 | 华南理工大学 研究 | 机器学习 出品 | AI蜗牛车 个人经历 本人本科双非,华南某985硕士,本硕都是计算机专业.本科玩过一段时间ACM,巨菜(现在想想,不管是考研还是求职 ...

  9. 大厂中秋礼盒大PK!祝大家中秋快乐,送大家鹅厂月饼礼盒!

    关注:极客重生,助你成就更好的自己! 图片素材来自:脉脉.知乎.微博等 hi,大家好,今天是中秋放假前最后一天班了,大伙心情是不是很激动呢,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼 ...

最新文章

  1. @transaction 提交事务_Kafka 事务实现原理
  2. 基于源码仿建视频解析网站
  3. vscode / ubuntu 下编译和调试 C/C++ 方法
  4. std::vector 从大到小排序
  5. Redis主从配置详细过程
  6. python3.7运行报错_Python 3.7 环境下运行 scrapy crawl 报错 def write(self, data, async=False)?...
  7. 数据在各层之间的发送过程
  8. 云原生数据中台的 What、Why、Who、How和Where
  9. AutoMapper学习笔记
  10. Ubuntu 16.04下安装SVN可视化客户端--RabbitVCS
  11. 手写原笔迹输入_手写原笔迹
  12. 了解“黑马程序员”有感
  13. oracle cude报错,【案例】Oracle报错PLS-00597 PLS-00635原因和解决办法笔记
  14. 使用n2disk和PF_RING构建一个(便宜的)2×10 Gbit(连续)数据包记录器
  15. 2017 谷歌 I/O大会
  16. 架构师实践日 8.18 北京站 | 智慧教育的智慧化探索,引领高效学习新出路
  17. 怎么快速解决dns被劫持问题?
  18. 【OUC深度学习入门】第4周学习记录:MobileNetV1, V2, V3
  19. UnityEditor代码分享导出材质贴图和Mesh本体
  20. javapdf转换成html,java pdf转换为html代码

热门文章

  1. 子类访问父类和方法覆写
  2. 2019-1-92.4G射频芯片培训资料
  3. 使用ASP.NET广告控件的XML语言创建广告链接--ASP.NET
  4. [leetcode]347. Top K Frequent Elements
  5. 改变listview中item选中时文字的颜色
  6. win32下Socket编程(1)
  7. Unity3D学习笔记之九为场景添加细节(二)
  8. apple tv设置_如何设置Apple HomePod
  9. 初学者万年历c语言源代码,C语言万年历的源程序
  10. Haproxy安装与配置