作者:架构师小麒
链接: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。

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

说说Nginx的核心技术和场景的使用方式!相关推荐

  1. Nginx的五大应用场景详解

    本文来说下Nginx的五大应用场景 文章目录 HTTP服务器 静态服务器 反向代理 负载均衡 动静分离 其他 HTTP服务器 Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用N ...

  2. 如何快速实现一个基于Nginx网站的监控场景

    一切从应用服务监控说起 小明所在的一家小型互联网创业公司一直将应用运行在阿里云上.该应用采用通用的分布式 Nginx+App 架构为用户提供电商数据统计的 webservice 服务.应用运行至今除偶 ...

  3. 架构设计:负载均衡层设计方案(1)——负载场景和解决方式

    架构设计:负载均衡层设计方案(1)--负载场景和解决方式 1.不同的负载场景 我们知道负载均衡层的作用是"将来源于外部的处理压力通过某种规律/手段分摊到内部各个处理节点上",那么不 ...

  4. Nginx深入详解之upstream分配方式

    http://blog.chinaunix.net/uid-22312037-id-4081140.html 一.分配方式         Nginx的upstream支持5种分配方式,下面将会详细介 ...

  5. nginx实现负载均衡的6种方式

    nginx实现负载均衡的6种方式 一.负载均衡 1.轮询 2.权重 3.ip_hash 4.最少连接least_conn nginx.conf配置文件内容详解 后续更新 一.负载均衡 nginx负载均 ...

  6. mysql如何根据业务分表设计_mysql分表分库的应用场景和设计方式

    很多朋友在论坛和留言区域问mysql在什么情况下才需要进行分库分表,以及采用何种设计方式才是最优的选择,根据这些问题,小编为大家整理了关于MySQL分库分表的应用场景和最优的设计方式举例. 一. 分表 ...

  7. kafka 脚本发送_Kafka笔记归纳(第五部分:一致性保证,消息重复消费场景及解决方式)...

    写在开头: 本章是Kafka学习归纳第五部分,着重于强调Kafka的事一致性保证,消息重复消费场景及解决方式,记录偏移量的主题,延时队列的知识点. 文章内容输出来源:拉勾教育大数据高薪训练营. 一致性 ...

  8. 设置ngxin服务器虚拟主机,详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同 ...

  9. swift调用oc_OC与Swift混编,三种场景的实现方式

    多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...

最新文章

  1. JDK 竟然是这样实现栈的?
  2. [导入]用Javascript实现interface的类似功能
  3. python标注审核_Python类型标注
  4. 有感于“用界面线程去更新界面元素”
  5. procise 时钟的坑
  6. Windows没有关机按钮 如何使用命令行关机 重启
  7. EasyUI怎么利用onBeforeRender事件
  8. 【linux】常用命令之scp命令
  9. 【跌倒检测】基于matlab中值滤波+二值化跌倒检测【含Matlab源码 344期】
  10. fiddler过滤配置
  11. 一篇文章讲清python开发必懂的8种数据结构
  12. 华为服务器忘记系统密码忘了,服务器忘记密码重置
  13. 关于创建Word的实例化对象的80040154 没有注册类 解决方法。。。。求帮助求帮助
  14. 入门须知:次世代3D建模软件有哪些?
  15. 极客兔兔 TensorFlow入门教程
  16. matlab声音的滤波处理,MATLAB声音信号的采集与滤波处理
  17. 定位java内存无限上涨问题
  18. 1688/阿里巴巴/拼多多API接口信息大全
  19. 用 Python 画个月饼,给大家助助兴
  20. 局域网相关之交换机、VLAN、ARP、链路聚合技术

热门文章

  1. android下载后的app自动安装,Android 7.0 下载APK后自动安装
  2. Statement接口实现查询数据、添加数据
  3. 简单介绍基于PostgreSql 别名区分大小写的问题
  4. 如何限制上传服务器的文件容量,如何通过配置php文件限制上传文件的大小
  5. js变量传给java_如何把JavaScript中的变量值传给javabean?
  6. 迁移学习之InceptionV3(159层),Xception(126层),Inception_ResNet_V2(572层)(图像识别)
  7. 二叉搜索树c/c++代码实现
  8. python3笔记_python3 笔记
  9. linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表
  10. linux 终端什么意思,请问我的终端显示的是什么意思