文章目录
产品出现瓶颈
公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户
但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。
于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求
Nginx出现
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
如上所述,出现瓶颈后:我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。
Nginx作用
Http代理,反向代理
正向代理
正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
正向代理的用途:
- 访问原来无法访问的资源,如google
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
反向代理的用途:
- 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
- 负载均衡,通过反向代理服务器来优化网站的负载
总结:
- 正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端
- 反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
轮询
顾名思义,轮流访问服务端
加权轮询
权重高,能得到的更多访问(比如某个服务器性能较好,可以设置高权重)
ip hash
对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题
动静分离
在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
说白了,就是静态资源交给了nginx来访问,减少服务器负担
Nginx的安装
下载nginx
http://nginx.org/en/download.html下载稳定版本
启动nginx
两种方式都可以使用
- 直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
- 打开cmd命令窗口,切换到nginx解压目录下,输入命令
nginx.exe
,回车即可
检查nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!
配置监听
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可
修改之后,需要执行命令 nginx -s reload
即可让改动生效
关闭nginx
如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx
- 输入nginx命令
nginx -s stop
(快速停止nginx) 或nginx -s quit
(完整有序的停止nginx) - 使用taskkill
taskkill /f /t /im nginx.exe
(终止进程)
Nginx常用命令
nginx 启动
nginx -s stop 停止
nginx -s quit 安全退出
nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
实战讲解
现在有个项目,我们分别用8080/8081进行启动
正常的访问,是用不同的端口进行访问
现在我们用nginx进行改造,修改其配置文件
- listen、server_name不用说,是访问的ip和端口
- location指的是代理:对应server_name,需要修改的是proxy_pass参数,里面的kuangstudy对应upstream名称
- upstream指的是负载均衡,weight是权重,值一样就轮询,值越大权重越大
reload一下nginx,再访问,就能发现nginx已经代理了服务了
由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!