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

面谈nginx核心能力
nginx是老牌web服务器,以下口水话的nginx基础能力,大家都耳熟能详,看看就行,面试官也不打算考查这个。
高并发连接: 官方称单节点支持5万并发连接数,实际生产环境能够承受2-3万并发。
内存消耗少: 在3万并发连接下,开启10个nginx进程仅消耗150M内存 (15M×10=150M)
配置简单
成本低廉: 开源免费
1. 正向、反向代理
所谓“代理”,是指在内网边缘 设置一个硬件/软件转发请求;
“正向”还是“反向”的说法,取决于转发的是"出站请求"还是"入站请求".
正向代理:处理来自客户端的出站请求,将其转发到Internet,然后将生成的响应返回给客户端。
反向代理:处理来自Internet的入站请求,将其转发给后端工作程序,然后将响应返回给Internet。

- 正向代理和反向代理 在代理的方向上不同,但都会代理处理HTTP请求/响应。
- 代理服务器存在的目的:
- 堡垒机/隔离内网: 内网客户端无法访问外网需要设置堡垒机、隐藏内网工作服务器
- 代理服务器附加功能: 对流量执行操作、使用缓存或压缩来提高性能、防御攻击并过滤信息
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基地址的妙招》,对动静分离的容器化很有裨益。
实用功能
通过端口支持 同一域名下多个webapp
绑定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/;
}
}
支持rewrite重写规则: 能够根据域名、url的不同,将http请求分发到后端不同的应用服务器节点上。
内置健康检查功能: 如果后端的某台应用节点挂了,请求不会再转发给这个节点,不影响线上功能。
关键指令: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;
}
节省带宽: 支持gzip压缩
解决跨域问题
① 反向代理
② 增加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回忆录的更多相关文章
- 化学专业大二转战Android开发,终于拥有了鹅厂暑期实习offer
我是双非学校,应用化学专业,一年前我大二,现在我大三.一年前我两手空空,现在我拥有了鹅厂暑期实习的offer. 虽然结果是好的,但我春招实习的道路远没有这么简单和辉煌,它是无比坎坷的:每个人应该量力而 ...
- 鹅厂优文|打通小程序音视频和webRTC
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云终端技术总监常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ.QQ物联 等产品 ...
- [转]【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解
小编:对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”,导致访问错误内容,失败连接等,让我们在互联网上畅游的爽快瞬间消失,而对于这关键的第一跳,鹅厂也在持续深入研究和思考对策,今天小编就邀请 ...
- 三年半Java后端面试鹅厂,三面竟被虐的体无完肤
经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位: go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背 ...
- 居家办公之后,鹅厂小哥发现Web开发竟能助力身体健康!
疫情特殊时期,各企业.学校纷纷启用远程办公和学习的方式,在办公期间,除了要完成日常工作安排,还要照顾自身的饮食起居,在高强度的工作节奏和缺少运动锻炼的情况之下,如何及早发现健康隐患,快乐办公?且看鹅厂 ...
- 16天5面,我终于拿到了鹅厂Offer
目录 1 - 为什么要在年底离职 1.1 惊觉:没有什么成长 1.2 投简历,敲打自己 1.3 面试它来了 1.4 提前触到目标? 2 - 我的鹅厂面试 2.1 技术一面 Java 语言相关 通用学科 ...
- 鹅厂优文 | ReactJS一点通
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂新鲜事儿发表于云+社区专栏 作者:卢文喆 腾讯云 UI工程师 导语 | 当React 刚开始红的时候,一直觉得 JSX 的设计思想 ...
- The server of Nginx(二)——Nginx基本功能配置
一.Nginx访问控制 (1)基于授权的访问控制 Nginx于Apache一样,可以实现基于用户授权的访问控制,当客户端要访问相应网站或者目录时要求输入用户名密码才能正常访问,配置步骤与Apache基 ...
- 面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工 ...
随机推荐
- 在kubernetes集群里集成Apollo配置中心(6)之实战使用apollo分环境管理dubbo服务
生产实践 1.迭代新需求/修复BUG(编码--->提git) 2.测试环境发版,测试(应用通过编译打包发布至test命名空间) 3.测试通过,上线(应用镜像直接发布至prod命名空间) 系统架构 ...
- wordpress 主题安装 您点击的链接已过期 nginx 出现413 Request Entity Too Large
1 nginx 出现413 Request Entity Too Large 问题是限制上传大小,解决: 1.打开nginx配置文件 nginx.conf, 路径一般是:/etc/nginx/ngin ...
- hlt instruction with IF=0
mov AH, 2DH ;写时间. mov DH, 0 ;此时为0秒. int 21H ;写入系统. 遇到了这个问题. 原因是以及在保护模式了.保护模式下中断机制发生了很大的变化,原来的中断向量表被I ...
- leetcode28 strstr kmp bm sunday
字符串匹配有KMP,BM,SUNDAY算法. 可见(https://leetcode-cn.com/problems/implement-strstr/solution/c5chong-jie-fa- ...
- C++中overload 、override、overwrite 之间的区别
Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载.(1)相同的范围(在同一个类中):(2)函数名字相同:( ...
- cin的用法
int val=0; cin>>val; 上述程序先定义了一个整型数据val,通过cin读取数据放在val中,如果输入的整型数据,则读取成功,返回的是>>左侧的对象,也就是is ...
- mybatis(十一)mybatis常见问题
用注解还是用 xml 配置? 常用注解:@Insert.@Select.@Update.@Delete.@Param.@Results. @Result 在 MyBatis 的工程中,我们有两种配置 ...
- 机器学习入门实战——基于knn的airbnb房租预测
数据读取 import pandas as pd features=['accommodates','bathrooms','bedrooms','beds','price','minimum_nig ...
- involution 内卷化
involution 内卷化 虽然不熟悉 involution,但是我想起另外两个常用词:evolution(进化)和 revolution(革命). 它们共同的词根volute,拉丁语原意是&quo ...
- 钉钉 & URL Scheme & Universal Link & Deep Link
钉钉 & URL Scheme & Universal Link & Deep Link DD link https://www.cnblogs.com/xgqfrms/p/1 ...