测试开发——Nginx大型 络框架中的应用(反向代理、动静分离)

站架构的基础由应用程序、数据库、文件组成,最开始这些都在一台服务器上,随着需求的变化我们如今的 站架构已经将应用、数据、文件都由部署在了独立的服务器上,并且每个部分都做了强大的优化设计,其中Nginx起到重要的作用:

一、服务的反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用 户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,即使用反向代理作为 Web 服务器的前置机来降低 络和服务器的负载,提高访问效率。

1、代理方向

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部 络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

二者之间的区别

位置不同

正向代理,架设在客户机和目标主机之间

反向代理,架设在服务器端

代理对象不同

正向代理,代理客户端,服务端不知道实际发起请求的客户端

反向代理,代理服务端,客户端不知道实际提供服务的服务端

二、在反向代理中配置负载均衡

什么是负载均衡

负载均衡,英文名称为 Load Balance,是高可用 络基础架构的关键组件,通常用于 将工作负载分布到多个服务器来提高 站、应用、数据库或其他服务的性能和可靠性

Nginx 负载均衡策略

轮询(默认)

每个请求按时间的先后顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉, 能自动剔除

指定权重

指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。权重值越 大被访问的几率就越大

upstream backserver {server 192.168.0.14;server 192.168.0.15 weight=2;}

IP 绑定 ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解 决 session 的问题

upstream backserver {ip_hash;server 192.168.0.14;server 192.168.0.15;}

实现负载均衡配置

需求

通过 www.cluster.com 访问服务集群。

nginx 服务器:192.168.233.137

tomcat1 服务:192.168.233.136:8080

tomcat2 服务:192.168.233.136:9090

配置 IP 与域名绑定

文件路径:C:WindowsSystem32driversetc

向文件添加:

192.168.233.137 www.tomcat1.cn

192.168.233.137 www.tomcat2.cn

192.168.233.137 www.cluster.cn

Nginx 配置服务集群

upstream myServer {server 192.168.233.136:8080;server 192.168.233.136:9090;}

在负载均衡中配置权重

upstream myServer {server 192.168.233.136:8080;server 192.168.233.136:9090 weight=2;}

weight 默认为 1.weight 越大,负载的权重就越大

down 表示当前的 server 暂时不参与负载

fail_timeout 与 max_fails fail_timeout 设置时间默认值为 10s,max_fails 设置次数默认值为 1。 在单位周期为 fail_timeout 设置的时间,中达到 max_fails 次数,这个周期次数内,如果后端同一个节点不可用,那么将把节点标记为不可用,并等待下一个周期(同样时常为 fail_timeout)再一次去请求,判断是否连接是否成功。

backup: 其它所有的非 backup机器 down 或者忙的时候,请求 backup 机器。所以这台机器的压力会最轻

三、Nginx可以做动静分离

为什么要做动静分离

  1. 动静分离是将 站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署
  2. 动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则使对静态资源的请求全部交给nginx处理,而讲动态请求转发给应用服务器处理,达到动静分离的目标,从而提高 站的并发性能,达到优化 站架构的效果

下面我们将使用一台Nginx+一台Tomcat模拟实现动静分离,项目将使用博主之前构建的项目并做部分修改

修改Web项目
修改项目下的index.html,添加img标签和js引入,修改后的代码如下:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>欢迎进入枣面包的面包坊</title>    <script type="text/javascript" src="js/nothing.js"></script></head><body>    <h1>欢迎进入枣面包的面包坊</h1>    <img src="img/photo.jpg"></body></html>

项目添加photo.jpg和nothing.js文件

将项目打包部署到之前搭建的Tomcat服务器中并启动,通过浏览器访问:

可以看到访问返回了3样东西:

  1. 访问接口通过模板渲染之后得到的文档:document
  2. 获得JavaScript标签引入的js文件:script——nothing.js
  3. 获得img标签请求得到的静态图片:jpeg——photo.jpg

配置nginx.conf

worker_processes  1; events {    worker_connections  1024;} http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;     server {        listen       80;        server_name  localhost;         #配置静态资源交给nginx处理,这里先只配置js和jpg        location ~ .*.(js|jpg) {            root /export/data/nginx/appdemo; #静态文件目录            expires 30d; #缓存天数        }        #配置除静态资源以外的交给tomcat处理        location / {            proxy_pass http://localhost:8080/appdemo-0.0.1-SNAPSHOT/;        }         error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    } }

重启Nginx服务

[root@centos6-1 ~]# cd /usr/local/nginx/sbin/[root@centos6-1 sbin]# ./nginx -s reload

web访问Nginx服务:192.168.214.150,情况如下:

发现访问nginx时,即变成了访问tomcat服务,这里就是用nginx进行了反向代理;但是也发现了获取不到nothing.js和photo.jpg文件,那是因为nginx配置了静态资源的路径,而该路径下没有该资源导致的,将对应资源上传到指定位置即可,在nginx.conf文件中的配置的静态资源路径为:
/export/data/nginx/appdemo

上传静态资源
使用lrzsz工具上传:三种方式实现Linux的文件上传下载,
https://blog.csdn.net/weixin_37490221/article/details/80844825

[root@centos6-1 ~]# cd /export/data/nginx/appdemo/[root@centos6-1 appdemo]# lltotal 8drwxr-xr-x. 2 root root 4096 Aug 27 03:42 imgdrwxr-xr-x. 2 root root 4096 Aug 27 03:42 js[root@centos6-1 appdemo]# cd img/[root@centos6-1 img]# rzrz waiting to receive.Starting zmodem transfer.  Press Ctrl+C to cancel.Transferring photo.jpg...  100%       7 KB       7 KB/sec    00:00:01       0 Errors  [root@centos6-1 img]# lltotal 8-rw-r--r--. 1 root root 8105 Aug 27  2018 photo.jpg[root@centos6-1 img]# cd ..[root@centos6-1 appdemo]# cd js[root@centos6-1 js]# rzrz waiting to receive.Starting zmodem transfer.  Press Ctrl+C to cancel.Transferring nothing.js...Transferring nothing.js... [root@centos6-1 js]# lltotal 0-rw-r--r--. 1 root root 0 Aug 27  2018 nothing.js[root@centos6-1 js]# 

浏览器访问

到这里就实现了Nginx和Tomcat的集成,实现了web服务的动静分离,将静态资源交给Nginx处理,这里是将静态资源存储在本地,通过Nginx访问,当然也可以代理到其他静态服务器上;再将非静态资源的请求代理给Tomcat动态处理。这样即削减了Tomcat的压力,又发挥了Nginx高并发的能力,使web服务更加健壮。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月15日
下一篇 2022年4月15日

相关推荐