您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
说说Nginx的核心技术和场景的使用方式!
 
 
  48  次浏览      3
2021-9-15
 
编辑推荐:
本文主要介绍了面谈nginx核心能力及实用功能。
本文来自于微信公账号 架构师社区 ,由火龙果软件Linda编辑推荐。

前天三面阿里云被虐,面试官问出了“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

? 延伸技能点:

有个文章讲述了: 《巧用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面试题自取。

   
48 次浏览       3
相关文章

物联网的发展瓶颈和关键技术
基于RFID技术的物联网研究与应用
基于RFID技术的物联网研究
基于物联网物流园区供应链管理平台
 
相关文档

无线技术之物联网概论
IPv6应用和实现技术
物联网应用范围及实例
物联网应用技术
相关课程

CISCO网络方案原理与应用
电力行业通信网络原理与技术
网络规划与管理
无线传感器网络技术
最新课程计划
 
最新文章
云原生架构概述
K8S高可用集群架构实现
容器云管理之K8S集群概述
k8s-整体概述和架构
十分钟学会用docker部署微服务
最新课程
云计算、微服务与分布式架构
企业私有云原理与构建
基于Kubernetes的DevOps实践
云平台架构与应用(阿里云)
Docker部署被测系统与自动化框架实践
更多...   
成功案例
北京 云平台与微服务架构设计
通用公司GE Docker原理与实践培训
某军工研究单位 MDA(模型驱动架构)
知名消费金融公司 领域驱动设计
深圳某汽车企业 模型驱动的分析设计
更多...