当前位置: 首页 > 科技观察

鹅厂第二面,Nginx回忆录

时间:2023-03-21 15:57:13 科技观察

本文转载自微信公众号《一个全栈码农的画像》,作者小马甲。转载本文请联系全栈码农画像公众号。上周二遇到鹅厂,面试官问“你懂nginx吗?”这么宽泛直白的句型,我一时抓不住重点,一时无语。下班想了想,平时潜移默化的用了很多nginx的能力,面试的时候并没有把相应的概念炸掉。Nginx是一个老式的网络服务器。下面的话nginx的基本能力大家都很熟悉了。看看吧。面试官不打算检查这个。高并发连接数:官方单节点支持5万并发连接,实际生产环境可以承受2万到3万并发连接。内存消耗少:3万并发下,开启10个nginx进程只消耗150M内存(15M×10=150M)配置简单,成本低:开源免费1.正向和反向代理所谓“代理”是指在内网边缘设置硬件/软件转发请求;术语“转发”或“反向”取决于转发是“出站请求”还是“入站请求”。转发代理:处理来自客户端请求的出站请求,将其转发到Internet,并将结果响应返回给客户端。反向代理:处理来自互联网的入站请求,将它们转发给后端工作者,并将响应返回给互联网。正向代理和反向代理在代理的方向上有所不同,但都代理了HTTP请求/响应。代理服务器的用途:堡垒机/隔离内网:内网客户端无法访问外网。需要搭建堡垒机,隐藏内网工作服务器。代理服务器的附加功能:对流量进行操作,使用缓存或压缩提高性能,防御攻击和过滤信息2.负载均衡负载均衡一般伴随着反向代理,起到分发流量,透明代理,和增强容错性http{upstreammyapp1{serversrv1.example.com;serversrv2.example.com;serversrv3.example.com;}server{listen80;location/{proxy_passhttp://myapp1;}}}早期,我们的核心产品部署在两台WindowsServerIIS上,前面部署了一个nginx做负载均衡。很显然,这里有个【负载均衡策略】的知识点。round-robin顾名思义:pollingleast-connected:下一个请求会发送给活跃链接最小的服务器ip-hash:根据客户端的ip地址和hash函数决定将请求发送到哪个服务器//nginx.org/en/docs/http/load_balancing.html扩展技能点:①【服务发现】:在容器/K8S环境下,服务地址由集群系统动态分配,一般都有内置服务发现能力,定义在docker-compose/K8s中,服务名代表整个服务。②【Sessionaffinity】:也叫“stickysession”,保证在一个有状态的应用中,同一个客户端的请求命中一个后端服务器。3、动静分离动静分离与流行的前后端分离概念有关。前端可以自行开发测试,可以使用nginx组成静态资源服务器,后端服务仅作为附加资源使用。下面的例子说明静态资源在/usr/share/nginx/html,动态资源路径包含api或者swagger。upstremeap_website{servereapwebsite;}server{listen80;location/{#staticresourceroot/usr/share/nginx/html;index.htmlindex.htm;try_files$uri/index.html;}location^~/api/{#dynamicresourceproxy_passhttp://eap_website/api/;}location^~/swagger/{#动态资源proxy_passhttp://eap_website/swagger/;}}?扩展技能点①上面的过程也是推荐的第四点,来自对于这个系统,可惜后端沦为api开发②这里有一个《有关在容器生成阶段动态插入api基地址的妙招》,非常有利于动静分离的容器化。实用功能支持同域名下多个webapp绑定https证书通过1、2端口一起体现:一个域名绑定443和8080端口,两个https站点upstreamreceiver_server{serverreceiver:80;}upstreamapp_server{serverapp:80;}服务器{listen443sslhttp2;server_nameeqid.gridsum.com;ssl_certificate/conf.crt/live/gridsum.com.crt;ssl_certificate_key/conf.crt/live/gridsum.com.key;location/{proxy_passhttp://receiver_server/;}}服务器{listen8080sslhttp2;server_nameeqid.gridsum.com:8080;ssl_certificate/conf.crt/live/gridsum.com.crt;ssl_certificate_key/conf.crt/live/gridsum.com.key;location/{proxy_passhttp://app_server/;}}支持rewrite重写规则:可以根据不同的域名和url,将http请求分发到后端不同的应用服务器节点。内置健康检查功能:如果后台某个应用节点宕机,请求不会转发到该节点,不影响在线功能。关键指令:max_fails,fail_timeoutupstreambackend{serverbackend1.example.comweight=5;server127.0.0.1:8080max_fails=3fail_timeout=30s;serverunix:/tmp/backend3;serverbackup1.example.combackup;}节省带宽:支持gzip压缩解决交叉-domain问题①反向代理②加CORS响应头5、6点一起:前后端分离项目,跨域请求加CORS响应头,静态资源启用gzip压缩location/{gzipon;gzip_typesapplication/javascripttext/cssimage/jpeg;root/usr/share/nginx/html;indexindex.htmlindex.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';}输入一个大工厂,技术栈必须扩展到舒适区之外,大多数主要开发人员都有多种技能,即插即用哎。只有扎实的基础知识才能掌握,才能更快的解锁高难度的pose。