目录

NGINX介绍-鱼皮老师课程学习笔记

NGINX介绍–鱼皮老师课程学习笔记

世界上最受欢迎的web服务器、高性能 器、 、API网关和内容缓存

能部署网站,比其他服务器用更少的资源,同时处理更多的用户请求,让网站速度更快更稳定

一、安装nginx

https://i-blog.csdnimg.cn/img_convert/f21a0640b96e6c750cfb49639ce7a853.jpeg

https://i-blog.csdnimg.cn/img_convert/6a812739f27c7c45db66569344e2278e.jpeg

windows双击exe启动

https://i-blog.csdnimg.cn/img_convert/f71113846e41398fc952a6d0a4ab8453.jpeg

linux系统手动编译该目录

sudo ./nginx

https://i-blog.csdnimg.cn/img_convert/4fec2bf953904aece7c14972cd387920.jpeg

也可以使用第三方包管理工具

https://i-blog.csdnimg.cn/img_convert/8e2965196cd60c999b7383f969fc15d9.jpeg

访问域名–可以看到默认界面

https://i-blog.csdnimg.cn/img_convert/ed5780a6ce8e11adae64ee881373f8e2.jpeg

二、配置文件

nginx.conf配置文件由块和指令组成

https://i-blog.csdnimg.cn/img_convert/b0084f74c489d40c428d960473919e53.jpeg

通过location和root指令配置文件的根路径

https://i-blog.csdnimg.cn/img_convert/d8e80c67782e84c69ea04330c0896ede.jpeg

https://i-blog.csdnimg.cn/img_convert/6b9eb632f3c2bcebe00189ee1dbe152a.jpeg

可以修改网页内容

1.静态文件服务

开发好的网站通常包含js、html、css、图片等文件,称为静态文件

https://i-blog.csdnimg.cn/img_convert/d50ebbaeacbf49e5c8b80984f3c74734.jpeg

打开nginx配置文件,添加location块,用于根据请求地址处理请求

https://i-blog.csdnimg.cn/img_convert/6d405a4b7cc65fe43dede5f3e003f726.jpeg

比如通过root指令定义静态文件根目录,通过index指令定义默认首页文件

https://i-blog.csdnimg.cn/img_convert/2088514344d798fc8ce448f3571ff38b.jpeg

执行nginx -s reload命令重载配置,再次访问网站时就会返回刚配置的目录下的首页文件了

企业项目中,需要为特定路径定义不同的处理规则,location块的配置会更复杂

https://i-blog.csdnimg.cn/img_convert/9d0ffb2189924b4e54d5db2ae183ad51.jpeg

支持根据请求路径的特定部分,正则表达式进行匹配,比如到特定目录去寻找图片

https://i-blog.csdnimg.cn/img_convert/94987b2866ff8c9380880d6fff84d016.jpeg

2.反向代理

https://i-blog.csdnimg.cn/img_convert/cd3f12cb0de83e87040a70887de2fe8d.jpeg

nginx作为中介帮后端服务器接收请求

https://i-blog.csdnimg.cn/img_convert/e5d1f143412e48f7edf5eb9e3e97e744.jpeg

https://i-blog.csdnimg.cn/img_convert/011b823f186fada427dd818779c05ad8.jpeg

比如在location块中添加proxy_pass配置,可以将nginx在80端口/api/nginx的请求转发到本地8080端口的后端服务,这样就隐藏了后端服务器的ip地址,让客户端完全感知不到后端服务器的存在,更加安全,而且还能让前端和后端的域名统一,解决了跨域问题。

https://i-blog.csdnimg.cn/img_convert/8296238de342f04e209308b10115300c.jpeg

https://i-blog.csdnimg.cn/img_convert/3cd86125ae4ab9b687fbea86f1e5173e.jpeg

https://i-blog.csdnimg.cn/img_convert/d5d3a8863ebe5a7bb5a6fcbe9d9974ea.jpeg

反向代理还可以用于实现负载均衡,由于企业项目的流量巨大,通常需要有多台后端服务器,nginx可以作为高性能网关统一接受请求,并将请求按照特定规则转发到不同服务器进行处理,从而分散了请求压力,避免单一服务器过载

https://i-blog.csdnimg.cn/img_convert/6e499e9d3f11c99e26b669080c2702d3.jpeg

在nginx中实现负载均衡非常简单,首先通过 定义了一个名为backend的服务器组,其中包含2个后端服务器,然后通过反向代理配置,将请求转发到这个服务器组即可

https://i-blog.csdnimg.cn/img_convert/c2d1d10f08319c3d5a0e84dfcec1c331.jpeg

https://i-blog.csdnimg.cn/img_convert/33cb6f5004ca6e7cf7c26ccdcf5a78fc.jpeg

可以看到,每次都访问同一个地址,却会交替返回两种不同的内容,这是因为nginx的默认负载均衡算法是轮询,请求会被平均转发到两个不同的服务进行处理,反向代理还有更多的作用,比如缓存常见请求的响应,减少后端负担,集中处理SSl加密,认证和 等功能。

https://i-blog.csdnimg.cn/img_convert/6b9ab69717f22ec0ff0139c92bbe1f16.jpeg

https://i-blog.csdnimg.cn/img_convert/2f10cdb8131f8ec935ea357ba323d3f8.jpeg

3.改写请求和响应

https://i-blog.csdnimg.cn/img_convert/52f5c56c5edffcdcb0a9b55abf8c59fd.jpeg

在请求到达服务器或响应返回给客户端之前nginx可以对其进行修改,改写请求和响应有什么作用呢?

https://i-blog.csdnimg.cn/img_convert/01634d6e068d5e8a00c73c7affcc5810.jpeg

首先设置响应头,可以帮助我们控制浏览器缓存,通过nginx的add_header指令,可以为响应添加自定义的HTTP头,从而指导浏览器如何处理缓存,比如设置缓存有效期为30天,这样当用户访问这些图片时,浏览器会在本地缓存这些图片,下次访问时就不用访问服务器了

https://i-blog.csdnimg.cn/img_convert/f782914f78f58a46503a01206e17bde0.jpeg

https://i-blog.csdnimg.cn/img_convert/f959374313216e8aebb8c5d82b5c5ca5.jpeg

提高速度并减少了对服务器的请求

请求重定向

请求重定向允许我们将请求从一个地址自动引导到另一个地址,常见的应用场景包括将HTTP请求重定向到HTTPS或者将旧地址重定向到新地址

https://i-blog.csdnimg.cn/img_convert/b61eb2ee610e32c18d79ef1e2e6fda73.jpeg

在nginx中可以通过使用return指令加302状态码,配置重定向,当用户访问某个过期页面时,会被重定向跳转到新网站

比重定向更高级一些的是 URI重写

https://i-blog.csdnimg.cn/img_convert/37e7c6b1d01cb3f88da8cacee9372972.jpeg

Nginx提供了rewrite指令,支持正则表达式,可以非常灵活的将请问重写为不同的路径或网站,比如将api/v1/users的请求重写为api/users

https://i-blog.csdnimg.cn/img_convert/5fcfd5b0d0a663e45a963adc5cb403a4.jpeg

这样一来,后端就不用再关注api/v1的存在了,这种方法在网站迁移或者结构调整时非常有用,大家也不用记忆改写的具体语法,随用随查就可以了

Nginx高级功能

https://i-blog.csdnimg.cn/img_convert/0e5f7374a260a8509120a20955a9a78f.jpeg

熟悉nginx高级配置能更快速配置和管理nginx

https://i-blog.csdnimg.cn/img_convert/c7d8c6a0fe6d61e9222c38fb7a50241b.jpeg

熟悉nginx工具和模块生态,能够灵活运用nginx进行架构设计

1.日志记录

为了分析网站流量,用户行为和报错信息,我们可以开启nginx日志功能分为访问日志和错误日志

https://i-blog.csdnimg.cn/img_convert/92b49fef7afdeb137296b21a5cca41d6.jpeg

访问日志会记录所有请求的信息,更全面,可以通过修改access_log指令,调整日志存储路径,而错误日志仅记录nginx在处理请求时遇到的问题

https://i-blog.csdnimg.cn/img_convert/e913c8860a6b482ebe00b326b445557f.jpeg

https://i-blog.csdnimg.cn/img_convert/8dc52b42c8ab0109bb2b3209a69b8cd1.jpeg

错误又分为8个级别,可以为不同的级别指定不同的日志输出路径

https://i-blog.csdnimg.cn/img_convert/ec860a8dbcfb133b6b00cb16e2cc7b4e.jpeg

开启日志功能后就能直接在文件中查看日志了,如果有恶意用户攻击我们的网站,怎么办–nginx提供了

2.访问控制

https://i-blog.csdnimg.cn/img_convert/2fecb342ab9e2edf9ba7e0c89c6c0e90.jpeg

可以使用allow和deny指令对ip访问进行限制,比如不让127.0.0.1这个ip访问,这样一来,攻击者就访问不了网站了

为了保护网站,我们还可以使用nginx的限流功能

3.限流

https://i-blog.csdnimg.cn/img_convert/02adec832a1cbf2d28194b14113ec7e7.jpeg

比如这段路径,通过定义请求限流区域,并应用于根路径限制每个ip地址在1分钟内最多只能发送两个请求,这样后端服务就不会受到流量激增的影响,能够提高性能的稳定性

4.

在企业开发中,我们为了节省成本,通常会在同一台服务器上部署多个网站,这时就需要使用nginx的虚拟主机功能了

https://i-blog.csdnimg.cn/img_convert/4c5ca28b5e5b1db7bd968e4385a37cb1.jpeg

每个网站通常就是一个虚拟主机,会有一个server_name名称对应访问网站的域名,比如配置两台虚拟主机

配置虚拟主机后,nginx就能够根据请求的域名找到对应的网站配置并处理请求,除了上面这些还有gao级配置和技巧

gao级配置和技巧

https://i-blog.csdnimg.cn/img_convert/9e1a2b6635ff2161df539d76966f0b22.jpeg

比如可以通过后端响应缓存配置,让nginx直接从缓存中读取数据,来响应请求,能够显著提升性能,减少服务器的压力

https://i-blog.csdnimg.cn/img_convert/13da505c16e3491e5b9dce3f78b9b928.jpeg

通过正向代理的设置,nginx可以作为跳板机帮客户端发起请求,从而访问原本无法直接访问的网站

https://i-blog.csdnimg.cn/img_convert/50a9a5fb8d548be44a3a7dcf0b0b7731.jpeg

通过自定义错误页面,能够给用户提供更好的错误提示信息

https://i-blog.csdnimg.cn/img_convert/d9a4cbdeb2f4e334778eebb76dd93c7c.jpeg

https://i-blog.csdnimg.cn/img_convert/15716b90d916569bde8b189363e47f37.jpeg

此外,nginx支持websocket/https/http2等协议

https://i-blog.csdnimg.cn/img_convert/1ebf0af08dc107ec9bdfff247b933cfe.jpeg

还可以通过配置 ,减少传输的数据量,进一步优化性能

https://i-blog.csdnimg.cn/img_convert/988f59adb86038fd01d49b17d1ecddde.jpeg

最后nginx自身也支持一系列性能调优的配置

https://i-blog.csdnimg.cn/img_convert/7f1a427d8398b36c7a0d5494600769a7.jpeg

比如工作进程与连接数配置,可以从容应对高频发和大流量的场景。

nginx生态

https://i-blog.csdnimg.cn/img_convert/2b292933a89e37620d16017bc52419da.jpeg

初学者可以利用nginx官方推出的nginx amplify,轻量级的nginx UI、或者宝塔linux服务器管理面板等可视化工具,通过图形界面更直观的查看配置,分析流量和性能指标,从而提高操作和运维的效率,nginx的功能并不是一成不变的,我们可以通过各种各样的模块来扩展它的功能。

https://i-blog.csdnimg.cn/direct/7a12619b923c430781acde6376822b36.png

https://i-blog.csdnimg.cn/img_convert/be064a8eee8bc487aef76723c90f3154.jpeg

https://i-blog.csdnimg.cn/img_convert/7da7e6851c6f6fc95aace7b6360ae20a.jpeg

https://i-blog.csdnimg.cn/direct/ae2e30249fa4490ba007760629131657.png

https://i-blog.csdnimg.cn/img_convert/75e016eb9891cbf58acdea3df864c3d5.jpeg

比如我们常用的健康检查的模块

https://i-blog.csdnimg.cn/img_convert/b5f793109dc97e57572c790fbb298b28.jpeg

实现javascript语言扩展的模块

https://i-blog.csdnimg.cn/img_convert/4b5bd2894da8ac2c2cc052aec05f3cbd.jpeg

手动安装模块是比较繁琐的,需要下载源码并进行编译,这种情况下,我们就可以选择

https://i-blog.csdnimg.cn/img_convert/9e08969e0f3fa3bafcdf3aaf030508a5.jpeg

这样一个基于nginx的高性能web平台

它集成了大量模块、依赖项和lua脚本库,能够让你直接在nginx里开发复杂的业务逻辑,充分利用nginx的非阻塞IO模型来提升应用的性能,适合超高并发的场景

https://i-blog.csdnimg.cn/img_convert/a4a2feca66c50be13a4fc8f6e687c1b7.jpeg