当前位置: 首页 > 科技观察

详细讲解Nginx-反向代理-负载均衡-动静分离-HTTP服务器的主要应用场景

时间:2023-03-20 16:23:34 科技观察

今天只关注Nginx在不加载第三方模块的情况下能处理什么。由于第三方模块太多,介绍不完。这里根据之前的使用和理解做一个总结。Nginx能做什么?反向代理负载均衡HTTP服务器(包括动静分离)1.反向代理反向代理应该是Nginx做的最多的事情之一。什么是反向代理?简单的说就是真实的服务器不能被外网直接访问,所以需要一个代理服务器,代理服务器可以在和真实服务器处于同一个网络环境的情况下被外网访问。当然也可能是同一个服务器不同端口。下面粘贴一段简单的反向代理代码-server{listen80;server_namelocalhost;client_max_body_size1024M;location/{proxy_passhttp://localhost:8080;proxy_set_headerHost$host:$server_port;}}保存配置文件并启动Nginx,这样当我们访问localhost时,相当于访问localhost:8080。2.负载均衡负载均衡也是Nginx常用的功能。负载均衡是指分配给多个运行单元执行,如Web服务器、FTP服务器、企业关键应用服务器等关键任务服务器,共同完成工作。任务。简单来说就是当有两台或两台以上服务器时,将请求按照规则随机分发到指定的服务器上进行处理。一般负载均衡配置需要同时配置反向代理,通过反向代理跳转到负载均衡。Nginx目前支持3种负载均衡策略和2种常用的第三方策略。1)、RR(默认)每个请求按时间顺序一一分配到不同的后端服务器。如果后台服务器宕机,可以自动清除。upstreamtest{serverlocalhost:8080;serverlocalhost:8081;}server{listen81;server_namelocalhost;client_max_body_size1024M;location/{proxy_passhttp://test;proxy_set_headerHost$host:$server_port;}}负载均衡的核心代码是-upstreamtest{serverlocalhost:8080;serverlocalhost:8081;}2)、权重指定轮询概率,权重与访问比例成正比,用于后端服务器性能参差不齐的情况。比如upstreamtest{serverlocalhost:8080weight=9;serverlocalhost:8081weight=1;},一般10次中只有1次会访问8081,9次会访问8080-3),ip_hash(sessionmaintenance)上面2有一个两种方式都有问题,就是下一个请求来的时候,请求可能会分发到另外一个服务器上。当我们的程序不是无状态的时候(使用session保存数据),这时候就出现了一个很大的问题比如你在session中保存登录信息,跳转到另外一个服务器的时候需要重新登录,所以很多有时候我们需要一个客户端只能访问一个服务器,那么就需要使用iphash,每个iphash请求根据访问ip的hash结果分配,这样每个访问者固定访问一个后端服务器,可以解决session问题.上游测试{ip_hash;服务器本地主机:8080;服务器本地主机:8081;}4)、公平(第三方)请求根据后端服务器的响应时间进行分配,响应时间短的优先分配。上游后端{公平;服务器本地主机:8080;服务器本地主机:8081;}5)、url_hash(第三方)根据访问的url的hash结果分配请求,这样每个url都指向同一个后端服务器,后端服务器在缓存的时候效率更高。在upstream添加hash语句,server语句中不能写权重等参数,hash_method是upstream后端使用的hash算法{hash$request_uri;hash_methodcrc32;服务器本地主机:8080;服务器本地主机:8081;}3.HTTP服务器Nginx本身也是静态资源的服务器。当只有静态资源时,可以使用Nginx作为服务端。同时现在也很流行静态和动作分离,可以用Nginx来实现。首先我们看一下Nginx作为一个静态资源服务器server{listen80;server_namelocalhost;client_max_body_size1024M;location/{rootE:/wwwroot;indexindex.html;}}这样访问的话默认是index.htmlE盘wwwroot目录下。如果一个网站只是一个静态页面,可以使用这种方式来实现部署。4、动静分离动静分离是让动态网站中的动态网页按照一定的规则将不变的资源和经常变化的资源区分开来。动态资源和静态资源拆分之后,我们可以根据静态资源的特点进行缓存操作,这是网站静态处理的核心思想。upstreamtest{serverlocalhost:8080;serverlocalhost:8081;}server{listen80;server_namelocalhost;location/{roote:/wwwroot;indexindex.html;}#所有静态请求由nginx处理,存放目录为htmllocation~.(gif|jpg|jpeg|png|bmp|swf|css|js)${roote:/wwwroot;}#所有动态请求都转发给tomcat处理位置~.(jsp|do)${proxy_passhttp://test;}error_page500502503504/50x。html;location=/50x.html{roote:/wwwroot;}}这样就可以把html、图片、css和js放到wwwroot目录下,tomcat只负责处理jsp和请求,比如当后缀为gif,默认情况下Nginx会从wwwroot获取当前请求的动态图片文件并返回。当然这里的静态文件和Nginx在同一台服务器上,也可以在另一台服务器上,然后通过反向代理和负载均衡进行配置。