Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
功能:正向代理,反向代理,负载均衡,动静分离。
正向代理:VPN。客户端通过代理服务器请求资源服务器。代理客户端。
反向代理:代理服务器资源的代理,称为反向代理。代理服务器端。
负载均衡:内置策略(轮询、加权轮询,ip hash)
Nginx官网下载地址:http://nginx.org/en/download.html
下载之后解压,就可以运行。
这里我们使用VSCode中的和插件对Nginx进行操作。
修改配置文件 -> 执行 -> 访问IP:8000
静态页面配置一个AdminLTE后台管理系统。
配置文件示例:
正向代理:客户端的代理,如VPN。
反向代理:服务器端的代理,如Nginx。
这里我省略了后端程序ruoyi部署过程,只保留关键的Nginx配置。
:Nginx的主机IP,例如192.168.0.101
:nginx主机IP和端口,192.168.0.101:8001
:localhost:8088,里配置的主机名和端口。
:用户的真实IP,即客户端IP地址。
:代理路径。如果地址只配置到了,不包括URL,那么location将会被追加到转发的地址中。但是如果proxy_pass包括了URL,则location不会被追加到地址中。
eg:
- 为什么需要动静分离?
Apache Tocmat 严格来说是一款java EE服务器,主要是用来处理 servlet请求。处理css、js、图片这些静态文件的IO性能不够好,因此,将静态文件交给nginx处理,可以提高系统的访问速度,减少tomcat的请求次数,有效的给后端服务器降压。
- 图例
- Nginx配置文件示例:
- 修饰符与优先级
- 精确匹配()
- 前缀匹配()表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。优先级第二高。
- 正则匹配(和)
- 不写
缓冲一般放在内存中,如果不适合放入内存,则会将响应写入磁盘临时文件中。
启用缓冲后,Nginx先将后端请求响应(response)放入缓冲区,等到整个响应完成后,再发送给客户端。减少服务器长链接数量,释放资源。
Nginx默认是开启了缓冲。也可以用来手动的关闭Nginx缓冲。
如果整个响应不适合存到内存里,则将其中的一部分保存到磁盘上的临时文件中。
proxy_max_temp_file_size设置临时文件的最大值。
proxy_temp_file_write_size设置一次写入临时文件的大小。
启用缓存,nginx将响应保存到磁盘中,返回给客户端的数据首先从缓存中读取,这样相同的请求不会每次都发送到后端服务器,减少后端请求的数量。
启用缓存,需要在http上下文中使用指令,来设置缓存的本地目录,名称,大小。
缓存区可以被多个server共享,使用可以指定使用哪个缓存区。
- 配置图
- 负载均衡策略
round-robin
least-connected
(较为空闲的服务器)
来自同一个ip的请求会被转发到相同的服务器
key可以是字符串、变量或组合。
当有机器宕机时,只对不可用的请求IP重新HASH。
random
weight
- 健康监测
在Nginx的反向代理中,后台服务器如果在一定时间内响应失败超过指定数,Nginx会将该机器标记为失败,并且在后续的一段时间不再将请求打到这个服务器。
参数:检查周期,默认为10秒。
参数:失败次数,默认为1次。
转发与重定向。转发是服务器端的操作,而重定向是客户端变更请求的URL地址。反向代理属于转发,而重写属于重定向。
重定向状态码:301(永久重定向),302(临时重定向)
:若当前规则不匹配,停止后续匹配rewrite规则,使用重写后的路径,重新搜索loacaton及块内指令。
:若当前规则不匹配,停止处理后续rewrite规则,执行{}块内其他指令。
压缩响应,减少传输大小,占用CPU。
nginx默认会在传输文件前将其复制到缓冲区,使用指令,可以禁用复制到缓冲区。类似Java中的零拷贝(zero copy)。
检查指定的文件或目录是否存在,若不存在可以指定位置或状态码。