说说Nginx的核心技术和场景的使用方式!
作者:架构师小麒
链接:https://www.jianshu.com/p/ae7366a96f51
前言
前天三面阿里云被虐,面试官问出了“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面试题自取。
说说Nginx的核心技术和场景的使用方式!相关推荐
- Nginx的五大应用场景详解
本文来说下Nginx的五大应用场景 文章目录 HTTP服务器 静态服务器 反向代理 负载均衡 动静分离 其他 HTTP服务器 Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用N ...
- 如何快速实现一个基于Nginx网站的监控场景
一切从应用服务监控说起 小明所在的一家小型互联网创业公司一直将应用运行在阿里云上.该应用采用通用的分布式 Nginx+App 架构为用户提供电商数据统计的 webservice 服务.应用运行至今除偶 ...
- 架构设计:负载均衡层设计方案(1)——负载场景和解决方式
架构设计:负载均衡层设计方案(1)--负载场景和解决方式 1.不同的负载场景 我们知道负载均衡层的作用是"将来源于外部的处理压力通过某种规律/手段分摊到内部各个处理节点上",那么不 ...
- Nginx深入详解之upstream分配方式
http://blog.chinaunix.net/uid-22312037-id-4081140.html 一.分配方式 Nginx的upstream支持5种分配方式,下面将会详细介 ...
- nginx实现负载均衡的6种方式
nginx实现负载均衡的6种方式 一.负载均衡 1.轮询 2.权重 3.ip_hash 4.最少连接least_conn nginx.conf配置文件内容详解 后续更新 一.负载均衡 nginx负载均 ...
- mysql如何根据业务分表设计_mysql分表分库的应用场景和设计方式
很多朋友在论坛和留言区域问mysql在什么情况下才需要进行分库分表,以及采用何种设计方式才是最优的选择,根据这些问题,小编为大家整理了关于MySQL分库分表的应用场景和最优的设计方式举例. 一. 分表 ...
- kafka 脚本发送_Kafka笔记归纳(第五部分:一致性保证,消息重复消费场景及解决方式)...
写在开头: 本章是Kafka学习归纳第五部分,着重于强调Kafka的事一致性保证,消息重复消费场景及解决方式,记录偏移量的主题,延时队列的知识点. 文章内容输出来源:拉勾教育大数据高薪训练营. 一致性 ...
- 设置ngxin服务器虚拟主机,详解Nginx 虚拟主机配置的三种方式(基于端口)
Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同 ...
- swift调用oc_OC与Swift混编,三种场景的实现方式
多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...
最新文章
- JDK 竟然是这样实现栈的?
- [导入]用Javascript实现interface的类似功能
- python标注审核_Python类型标注
- 有感于“用界面线程去更新界面元素”
- procise 时钟的坑
- Windows没有关机按钮 如何使用命令行关机 重启
- EasyUI怎么利用onBeforeRender事件
- 【linux】常用命令之scp命令
- 【跌倒检测】基于matlab中值滤波+二值化跌倒检测【含Matlab源码 344期】
- fiddler过滤配置
- 一篇文章讲清python开发必懂的8种数据结构
- 华为服务器忘记系统密码忘了,服务器忘记密码重置
- 关于创建Word的实例化对象的80040154 没有注册类 解决方法。。。。求帮助求帮助
- 入门须知:次世代3D建模软件有哪些?
- 极客兔兔 TensorFlow入门教程
- matlab声音的滤波处理,MATLAB声音信号的采集与滤波处理
- 定位java内存无限上涨问题
- 1688/阿里巴巴/拼多多API接口信息大全
- 用 Python 画个月饼,给大家助助兴
- 局域网相关之交换机、VLAN、ARP、链路聚合技术
热门文章
- android下载后的app自动安装,Android 7.0 下载APK后自动安装
- Statement接口实现查询数据、添加数据
- 简单介绍基于PostgreSql 别名区分大小写的问题
- 如何限制上传服务器的文件容量,如何通过配置php文件限制上传文件的大小
- js变量传给java_如何把JavaScript中的变量值传给javabean?
- 迁移学习之InceptionV3(159层),Xception(126层),Inception_ResNet_V2(572层)(图像识别)
- 二叉搜索树c/c++代码实现
- python3笔记_python3 笔记
- linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表
- linux 终端什么意思,请问我的终端显示的是什么意思