前言:
在一个小型的个人博客网站中,因为没什么流量,并发量小,一般可以直接在一个服务器上的tomcat中直接运行jar包.由tomcat直接响应给客户。
到后面之后随着流量的增大,一台服务器的资源不够用了,此时就需要再多开一些服务器用于分担压力,将同一个项目部署在不同的服务器上,但是可以通过同一个域名去访问,这时候就需要一台中转服务器用于将请求分发。
Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 [13] ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
以上来自于百度百科。
Nginx作用
Http代理,反向代理:web服务器最常用的功能之一
正向代理:
在境内是无法访问外网的,需要通过vpn才可以访问,这里用到的就是一个正向代理,vpn所在服务器接收客户端的请求去访问外网的服务器,响应结果也通过vpn返回到客户端。
正向代理的服务对象是客户端。
反向代理
反向代理的服务对象是服务器,代理服务器将请求统一接收按照一定的规则分发到其中一台服务器,即使两次访问的都是同一个域名,但是响应的服务器也可能不是同一台服务器。
负载均衡
同一个项目部署到的不同的服务器很有可能资源都有所不同,这时候Nginx需要根据服务器的资源比选择不同的分发策略。
Nginx分发的策略
轮询: 依次分发到不同的服务器,实践上差不多就是平均分,每一轮就是所有服务器都分发到相同数量的请求。
加权轮询:根据不同服务器的资源占比分发不同数量的请求到不同的服务器,谁的资源多获得的请求就多。
Iphash
定义:对客户端请求的ip进行hash操作,根据hash结果将同一个ip的请求分发到同一台服务器处理,以此来解决Session不共享的问题。
Session共享:将一个项目部署到多台服务器时,因为Session是保存在Tomcat当中的,每一台服务器的Tomcat的Session都是不共享的。有一个解决方法就是使用Redis.
Nginx提供的解决方法就是Iphash。
缺点:如果一台服务器挂了,存在该服务器上的信息都会丢失,因此大多数情况还是要使用Redis实现Session共享。
动静分离:
当一个项目里面里面有较多的静态资源时我们希望可以从一个静态资源服务器加载到客户端,而不是从jar包里面返回,这样就可以提升一定的访问速度。
这里Ngin就可以做到这一点,这个应该就是所谓的前后端分离,war包都是静态资源,运行在Nginx服务器上,jar包则是后端代码,运行在tomcat服务器上,接收动态请求。
Nginx安装使用
在官网中下载windows版本的压缩包,解压到一个不含中文的路径下面,里面的内容如下所示
conf:配置文件 (最常使用)
在conf中有一个nginx.conf ,打开以后可以看见里面有如下,监听了本地的80端口
启动
(1)双击.exe文件
(2)通过命令行窗口启动
此时会出现如上的错误,原因翻译一下是尝试以套接字访问权限禁止的方式访问套接字什么的,反正就是不允许使用80端口,这时候可以在配置文件中更改监听端口号为90。
然后就可以成功启动了。
之后访问这个url http://localhost:90/会出现如下说明启动成功
Nginx常用命令
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件(常用) //在修改配置文件之后使用
ps aux|grep nginx 查看nginx进程