世界上最受欢迎的web服务器、高性能负载均衡器、反向代理、API网关和内容缓存
Nginx能部署网站,比其他服务器用更少的资源,同时处理更多的用户请求,让网站速度更快更稳定
一、安装nginx
windows双击exe启动
linux系统手动编译该目录
sudo ./nginx
也可以使用第三方包管理工具
访问域名--可以看到默认界面
二、配置文件
nginx.conf配置文件由块和指令组成
通过location和root指令配置文件的根路径
可以修改网页内容
1.静态文件服务
开发好的网站通常包含js、html、css、图片等文件,称为静态文件
打开nginx配置文件,添加location块,用于根据请求地址处理请求
比如通过root指令定义静态文件根目录,通过index指令定义默认首页文件
执行nginx -s reload命令重载配置,再次访问网站时就会返回刚配置的目录下的首页文件了
企业项目中,需要为特定路径定义不同的处理规则,location块的配置会更复杂
支持根据请求路径的特定部分,正则表达式进行匹配,比如到特定目录去寻找图片
2.反向代理
nginx作为中介帮后端服务器接收请求
比如在location块中添加proxy_pass配置,可以将nginx在80端口/api/nginx的请求转发到本地8080端口的后端服务,这样就隐藏了后端服务器的ip地址,让客户端完全感知不到后端服务器的存在,更加安全,而且还能让前端和后端的域名统一,解决了跨域问题。
反向代理还可以用于实现负载均衡,由于企业项目的流量巨大,通常需要有多台后端服务器,nginx可以作为高性能网关统一接受请求,并将请求按照特定规则转发到不同服务器进行处理,从而分散了请求压力,避免单一服务器过载
在nginx中实现负载均衡非常简单,首先通过upstream块定义了一个名为backend的服务器组,其中包含2个后端服务器,然后通过反向代理配置,将请求转发到这个服务器组即可
可以看到,每次都访问同一个地址,却会交替返回两种不同的内容,这是因为nginx的默认负载均衡算法是轮询,请求会被平均转发到两个不同的服务进行处理,反向代理还有更多的作用,比如缓存常见请求的响应,减少后端负担,集中处理SSl加密,认证和日志记录等功能。
3.改写请求和响应
在请求到达服务器或响应返回给客户端之前nginx可以对其进行修改,改写请求和响应有什么作用呢?
首先设置响应头,可以帮助我们控制浏览器缓存,通过nginx的add_header指令,可以为响应添加自定义的HTTP头,从而指导浏览器如何处理缓存,比如设置缓存有效期为30天,这样当用户访问这些图片时,浏览器会在本地缓存这些图片,下次访问时就不用访问服务器了
提高速度并减少了对服务器的请求
请求重定向
请求重定向允许我们将请求从一个地址自动引导到另一个地址,常见的应用场景包括将HTTP请求重定向到HTTPS或者将旧地址重定向到新地址
在nginx中可以通过使用return指令加302状态码,配置重定向,当用户访问某个过期页面时,会被重定向跳转到新网站
比重定向更高级一些的是URI重写
Nginx提供了rewrite指令,支持正则表达式,可以非常灵活的将请问重写为不同的路径或网站,比如将api/v1/users的请求重写为api/users
这样一来,后端就不用再关注api/v1的存在了,这种方法在网站迁移或者结构调整时非常有用,大家也不用记忆改写的具体语法,随用随查就可以了
Nginx高级功能
熟悉nginx高级配置能更快速配置和管理nginx
熟悉nginx工具和模块生态,能够灵活运用nginx进行架构设计
1.日志记录
为了分析网站流量,用户行为和报错信息,我们可以开启nginx日志功能分为访问日志和错误日志
访问日志会记录所有请求的信息,更全面,可以通过修改access_log指令,调整日志存储路径,而错误日志仅记录nginx在处理请求时遇到的问题
错误又分为8个级别,可以为不同的级别指定不同的日志输出路径
开启日志功能后就能直接在文件中查看日志了,如果有恶意用户攻击我们的网站,怎么办--nginx提供了访问控制
2.访问控制
可以使用allow和deny指令对ip访问进行限制,比如不让127.0.0.1这个ip访问,这样一来,攻击者就访问不了网站了
为了保护网站,我们还可以使用nginx的限流功能
3.限流
比如这段路径,通过定义请求限流区域,并应用于根路径限制每个ip地址在1分钟内最多只能发送两个请求,这样后端服务就不会受到流量激增的影响,能够提高性能的稳定性
4.虚拟主机
在企业开发中,我们为了节省成本,通常会在同一台服务器上部署多个网站,这时就需要使用nginx的虚拟主机功能了
每个网站通常就是一个虚拟主机,会有一个server_name名称对应访问网站的域名,比如配置两台虚拟主机
配置虚拟主机后,nginx就能够根据请求的域名找到对应的网站配置并处理请求,除了上面这些还有gao级配置和技巧
gao级配置和技巧
比如可以通过后端响应缓存配置,让nginx直接从缓存中读取数据,来响应请求,能够显著提升性能,减少服务器的压力
通过正向代理的设置,nginx可以作为跳板机帮客户端发起请求,从而访问原本无法直接访问的网站
通过自定义错误页面,能够给用户提供更好的错误提示信息
此外,nginx支持websocket/https/http2等协议
还可以通过配置Gzip压缩,减少传输的数据量,进一步优化性能
最后nginx自身也支持一系列性能调优的配置
比如工作进程与连接数配置,可以从容应对高频发和大流量的场景。
nginx生态
初学者可以利用nginx官方推出的nginx amplify,轻量级的nginx UI、或者宝塔linux服务器管理面板等可视化工具,通过图形界面更直观的查看配置,分析流量和性能指标,从而提高操作和运维的效率,nginx的功能并不是一成不变的,我们可以通过各种各样的模块来扩展它的功能。
比如我们常用的健康检查的模块
实现javascript语言扩展的模块
手动安装模块是比较繁琐的,需要下载源码并进行编译,这种情况下,我们就可以选择OPenResty
这样一个基于nginx的高性能web平台
它集成了大量模块、依赖项和lua脚本库,能够让你直接在nginx里开发复杂的业务逻辑,充分利用nginx的非阻塞IO模型来提升应用的性能,适合超高并发的场景