当前位置: 首页 > 后端技术 > PHP

Nginx除了负载均衡还能做什么?

时间:2023-03-30 02:33:26 PHP

本文只关注Nginx在不加载第三方模块的情况下可以做什么。由于第三方模块太多,介绍不完。当然,文章本身可能并不完整。毕竟,这只是我个人的使用和理解。到过那里。Nginx能做什么?反向代理负载均衡HTTP服务器(包括动静分离)正向代理以上就是我知道的Nginx在不依赖第三方模块的情况下可以搞定的。下面详细解释每个功能的实现方法。反向代理反向代理应该是Nginx做的最多的事情之一。什么是反向代理?然后将请求转发给内网的服务器,将从服务器得到的结果返回给外网请求连接的客户端。此时代理服务器对外充当反向代理服务器。简单来说,真实服务器不能被外网直接访问,所以需要一个代理服务器,代理服务器可以在和真实服务器处于同一个网络环境的情况下被外网访问。当然也有可能是同一个服务器,端口不同而已。在下面粘贴一个简单的反向代理代码:server{listen80;服务器名称本地主机;client_max_body_size1024M;位置/{proxy_passhttp://localhost:8080;proxy_set_header主机$host:$server_port;保存配置文件后启动Nginx,这样当我们访问localhost时,就相当于访问了localhost:8080。负载均衡负载均衡也是Nginx常用的功能。负载均衡是指分配给多个运行单元执行,如Web服务器、FTP服务器、企业关键应用服务器等关键任务服务器,共同完成工作任务。简单来说就是当有两台或两台以上服务器时,将请求按照规则随机分发到指定的服务器上进行处理。一般负载均衡配置需要同时配置反向代理,通过反向代理跳转到负载均衡。Nginx目前支持3种负载均衡策略和2种常用的第三方策略。RR(默认)每个请求按时间顺序一一分配给不同的后端服务器。如果后台服务器宕机,可以自动清除。上游测试{服务器localhost:8080;服务器本地主机:8081;}服务器{听81;服务器名称本地主机;client_max_body_size1024M;位置/{proxy_passhttp://test;proxy_set_header主机$host:$server_port;}}负载均衡核心代码For:upstreamtest{serverlocalhost:8080;服务器本地主机:8081;}这里我配置了两台服务器,当然实际上是一台,只是端口不一样,而且8081的服务器是不存在的,也就是说访问没有,但是我们访问http://localhost的时候会有没问题,默认会跳转到http://localhost:8080。具体原因是Nginx会自动判断服务器的状态。如果服务器无法访问(服务器挂掉),则不会跳转到这台服务器,这样也避免了某台服务器挂掉影响使用的情况。由于Nginx默认是RR策略,我们不需要其他更多的设置。权重指定轮询概率,权重与访问比例成正比,用于后端服务器性能参差不齐的情况。例如,上游测试{serverlocalhost:8080weight=9;服务器本地主机:8081权重=1;}那么在10次中,只有1次会访问8081,9次会访问8080。上面有两种方式ip_hash一个问题是下一个请求来的时候,请求可能会分发到另外一台服务器上。当我们的程序不是无状态的时候(session是用来保存数据的),这时候就存在一个很大的问题,比如把登录信息保存在session中,所以跳转到另外一个服务器的时候需要重新登录,那么很多时候我们需要一个客户端只能访问一台服务器,那么就需要使用iphash,iphash的每次请求访问都是通过ip的hash结果分布,这样每个访问者固定访问一个后端服务器,这样就可以解决session问题。上游测试{ip_hash;服务器本地主机:8080;服务器本地主机:8081;公平(第三方)请求根据后端服务器的响应时间分配,响应时间短的优先。上游后端{公平;服务器本地主机:8080;服务器本地主机:8081;}url_hash(第三方)根据访问的url的hash结果分配请求,使每个url指向同一个后端服务器,后端服务器缓存起来比较高效。在upstream添加hash语句,server语句中不能写权重等参数,hash_method是upstream后端使用的hash算法{hash$request_uri;hash_methodcrc32;服务器本地主机:8080;服务器本地主机:8081;}以上5种加载Equilibrium适用于不同的情况,可以根据实际情况选择使用哪种策略模式,但是fair和url_hash需要安装第三方模块才能使用。由于本文主要介绍的是Nginx可以做什么,所以在Nginx中安装第三方模块就不再本文介绍了。参考:只为让你了解Nginx,这篇文章就够了!HTTP服务器Nginx本身也是一个静态资源服务器。当只有静态资源时,可以使用Nginx作为服务端。同时,静态和动作分离也很流行,所以可以通过Nginx来实现。首先,让我们把Nginx看成一个静态资源服务器。服务器{听80;服务器名称本地主机;client_max_body_size1024M;位置/{roote:wwwroot;索引index.html;这样,如果访问http://localhost,会默认到E盘wwwroot目录下的index.html,如果一个网站只是一个静态页面,那么可以这样部署.动静分离动静分离就是让动态网站中的动态网页按照一定的规则把不变的资源和经常变化的资源区分开来。动静态资源拆分后,我们可以根据静态资源的特点进行缓存操作,这就是网站静态处理上游测试的核心思想{serverlocalhost:8080;服务器本地主机:8081;}服务器{听80;服务器名称本地主机;位置/{roote:wwwroot;索引index.html;}#所有static所有请求都由nginx处理,存放目录为html位置~.(gif|jpg|jpeg|png|bmp|swf|css|js)${roote:wwwroot;}#所有动态请求都转发给tomcat处理location~.(jsp|do)${proxy_passhttp://test;}error_page500502503504/50x.html;location=/50x.html{roote:wwwroot;这样我们就可以把html和图片以及css和js放在wwwroot目录下,而tomcat只负责处理jsp和请求。比如当我们的后缀为gif时,Nginx会默认从wwwroot获取当前请求的动态图片文件并返回。当然这里的静态文件和NginxServer是一样的,我们也可以在另外一台服务器上,然后通过反向代理和负载均衡进行配置。只要把最基本的流程想通,很多配置都非常简单。另外localtion后面其实是跟了一个regularexpression,所以很灵活。正向代理正向代理是指客户端和原始服务器(originserver)之间的服务器。为了从原始服务器获取内容,客户端向代理发送请求并指定目标(原始服务器),然后代理发送原始服务器转发请求并将获取的内容返回给客户端,这样客户端可以使用转发代理。解析器114.114.114.1148.8.8.8;服务器{resolver_timeout5s;听81;access_loge:wwwrootproxy.access.log;error_loge:wwwrootproxy.error.log;location/{proxy_passhttp://$host$request_uri;是配置正向代理的DNS服务器,listen是正向代理的端口。配置好后服务器ip+端口号就可以在IE或者其他代理插件上进行代理了。最后说一下启动、停止和配置文件位置的两条命令:/etc/init.d/nginxstart/restart#启动/重启Nginx服务/etc/init.d/nginxstop#停止Nginx服务/etc/nginx/nginx。conf#Nginx配置文件位置Nginx支持热重启,也就是说我们修改配置文件后,不需要关闭Nginx,配置就可以生效。Nginx重新读取配置的命令是nginx-sreload。