鹅厂二面,Nginx回忆录

上周二面鹅厂,面试官问出了“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的实践,应该足够在下一次面试中吹水了,如有错误,请留言赐教。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nagios监控mysql主机,nginx,cpu,网卡流量

nagios安装完成,打开/usr/local/nagios/etc/nagios.cfg去掉cfg_dir/usr/local/nagios/etc/servers前面的#号,并创建/usr/local/nagios/etc/servers目录(此目录下放被监控机的配置文件),重启nagios服务service nagios r…

干货|吴恩达Coursera课程教你学习神经网络二!

上一周的课程中讲了神经网络的结构以及正向传播(feed forward)过程,了解了神经网络是如何进行预测的,但是预测的结果怎么和真是结果进行比较以及发现了错误如何修改还没有提及。这一周的课程中,介绍了cost function作为结果比较的标准以及bac…

vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南

预渲染原理在webpack打包结束并生成文件后(after-emit hook),会启动一个server模拟网站的运行,用puppeteer(google官方的headless 无头浏览器浏览器)访问指定的页面route,得到相应的html结构&am…

Dotnet的数据定位和匹配

Dotnet里,数据定位和匹配的相关编程现在变得很舒服。最近项目紧,还要不停出差。所以,写个短点的、最近经常用到的内容:数据定位和匹配。数据定位假设我们有这样一个数组:var array new int[] { 1, 2, 3, 4, 5, 6, 7, …

一年后,我又来了

差不多一年没有更新过博客了,这一年,怀孕生子,人变懒惰了,不想思考。在家休假也大半年了,颓废,什么也没干。现在宝宝已经两个多月了,没多久也要上班了,生活也逐渐走上正轨&#xff0…

mysql怎么存照片信息_mysql怎么存储图片信息?

方法一:把照片放进数据库,照片的格式最好是bmp,这样就可以在窗体上显示出来,不过这样数据库的体积会暴增。详细的使用方法请参考Access帮助中的 PictureData 属性(本文末尾有相关帮助)。而且,你可以直接用 commdlg API…

使用 .NET CLI 构建项目脚手架

前言在微服务场景中,开发人员分配到不同的小组,系统会拆分为很多个微服务,有一点是,每个项目都需要单元测试,接口文档,WebAPI接口等,创建新项目这些都是重复的工作,而且还要保证各个…

.net 垃圾回收机制

尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(Garbage Collection),但是我们还是应该了解它们,以优化我们的应用程序。同时,还需要具备一些基础的内存管理工作机制的知识,这样能够有助于解释我们日常程序编写中的变…

《自然》杂志:中国人越来越沉迷于对着一个叫“区块链”的东西胡言乱语

起初,《自然》杂志以为在2018年春节前后中国发生了一场瘟疫,但很快就改变了这一看法。除了精神亢奋无法入睡,那里的人们身体还算健康。不过,他们越来越沉迷于对着一个叫“区块链”的东西胡言乱语,根本停不下来。因为教…

python if 跳出_Python保留字简单释义

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/87393696来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Guido van Rossum在1991年正式对外发布Python版本,现在已成为最流行的语言…

客官,.NETCore无代码侵入的模型验证了解下

.NETCore下的模型验证相信绝大部分的.NET开发者或多或少的都用过,微软官方提供的模型验证相关的类位于System.ComponentModel.DataAnnotations命令空间下,在使用的时候只需要给属性添加不同的特性即可实现对应的模型验证。如下所示:public cl…

敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记

这两周一直忙着OpenExpressApp的自动化测试支持了,对于敏捷个人最近在思考作为新手如何学习的问题,后期我会写篇blog与大家分享一下。在敏捷个人项目中我发布了敏捷个人-认识自我,管理自我.pdf,有很多朋友之前看过&…

大数据揭秘:低学历者发财的概率有多大?结果很吃惊

先看两幅图:Table 1: Mean Earnings by Highest Degree Earned, $: 2009 (SAUS, table 232)Table 2: Unemployment Rates by Educational Attainment图一是美国社会收入和最高学历的关系,图二是美国社会失业率和受教育程度的关系,数据来自SAU…

多个cpp文件生成so_boostpython:从多个.cpp文件创建一个模块(.so)

我开始在C中编写一些我想在Python代码中调用的模块。为此,我使用boostpython。随着代码的增长,我决定将其分成几个.cpp文件。现在,我有了这样的东西:食品.cpp#include "Bar.hpp"#include "Baz.hpp"#include u…

SSH远程终端连接数问题

系统 linux (Debian) 存在问题:SSH终端连接数最大为10个 解决方案: 1) 修改/etc/ssh/sshd_config中#MaxStartups 10:30:60,将其改为MaxStartups 1000 2) 重启SSH服务,/etc/init.d/ssh restar…

Win10 Terminal + WSL 2 安装配置指南

自从 Windows Terminal 正式发布后就再没有用过 Windows 系统自带的终端了。主要是 Terminal 简洁且灵活,更重要的是支持特殊字体,通过一些简单的配置可以使得终端看起来更舒适养眼。自从 Win 10 有了 Linux 子系统(WSL)&#xff…

如何快速解剖数据背后隐藏的信息

1946年2月16日,是一个值得纪念的日子。在这一天,人类历史上真正意义上的第一台电子计算机诞生了,此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

mysql改密码脚本_mysql密码修改脚本

网上搜索: mysql密码修改工具 title 护卫神MySQL密码修改工具 echo off color 0a ECHO ┏━━━━━━━━━━┥ 护卫神www.huweishen.com ┝━━━━━━━━━┓ ECHO ┃ 提示: ┃ E…

来,Consul 服务发现入个门(一看就会的那种)

前言在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发、独立部署,最后聚合在一起形成一个系统提供服务。当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口&#xf…