前言本文只关注Nginx在不加载第三方模块的情况下可以做什么。由于第三方模块太多,介绍不完。当然,这篇文章本身也可能是不完整的。毕竟,我只是亲身使用过和使用过。学得好。Nginx可以做什么1.反向代理2.负载均衡3.HTTP服务器(包括动静分离)4.正向代理以上就是我所知道的Nginx在不依赖第三方模块的情况下可以处理的。下面分别解释一下每个功能反向代理反向代理应该是Nginx做的最多的事情之一。什么是反向代理?然后将Internet上的连接请求转发给内部网络的服务器,从服务器得到的结果返回给Internet上请求连接的客户端。此时代理服务器对外充当反向代理服务器。简单来说,真实服务器不能被外网直接访问,所以需要一个代理服务器,代理服务器可以在和真实服务器处于同一个网络环境的情况下被外网访问。当然也有可能是同一个服务器,端口不同而已。粘贴一个简单的反向代理代码server{listen80;server_namelocalhost;client_max_body_size1024M;location/{proxy_passhttp://localhost:8080;proxy_set_headerHost$host:$server_port;}}保存配置文件并启动Nginx,这样当我们访问localhost时,它相当于访问localhost:8080负载均衡负载均衡也是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台服务器,当然实际上是一台,只是端口不一样,8081的服务器不存在,也就是说不能访问,但是我们访问http://使用localhost时不会有问题,默认会跳转到http://localhost:8080。具体原因是Nginx会自动判断服务器的状态。如果服务器无法访问(服务器宕机),则不会跳转到此服务器,也避免了某台服务器挂掉影响使用的情况。由于Nginx默认是RR策略,我们不需要其他更多的设置。2.权重指定轮询概率,权重与访问比例成正比,用于后端服务器性能参差不齐的情况。比如upstreamtest{serverlocalhost:8080weight=9;serverlocalhost:8081weight=1;},一般10次只有1次会访问8081,9次会访问80803。ip_hash上面的两种方法都有问题。即,当下一个请求到来时,该请求可能会分发到另一台服务器。当我们的程序不是无状态的时候(使用session保存数据),这时候就出现了一个很大的问题,比如保存登录信息在session中,跳转到另外一个服务器的时候需要重新登录,所以很多时候我们需要一个客户端只访问一台服务器,那么就需要使用ip_hash,ip_hash的每次请求都是根据访问ip的hash结果进行赋值,这样每个访问者固定访问一个后端服务器,可以解决session问题。upstreamtest{ip_hash;serverlocalhost:8080;serverlocalhost:8081;}4、fair(第三方)根据后端服务器的响应时间分配请求,响应时间短的优先。upstreambackend{fair;serverlocalhost:8080;serverlocalhost:8081;}5.url_hash(第三方)根据访问的url的hash结果分配请求,使每个url指向同一个后端服务器,当后端服务器是缓存。向上游添加哈希语句。服务器语句中不能写其他参数,如重量。hash_method是使用的散列算法。在某些情况下会用到,所以可以根据实际情况选择使用哪种策略模式,但是fair和url_hash需要安装第三方模块才可以使用。由于本文主要介绍Nginx可以做什么,Nginx安装的第三方模块本文不再介绍。HTTP服务器Nginx本身也是静态资源的服务器。当只有静态资源时,可以使用Nginx作为服务端。同时,静态和动作分离也很流行,可以使用Nginx来实现。首先我们把Nginx看成一个静态资源服务器server{listen80;server_namelocalhost;client_max_body_size1024M;location/{roote:\wwwroot;indexindex.html;}}这样,如果访问http://localhost,就会默认E盘wwwroot目录下的index.html。如果一个网站只是一个静态页面,那么可以通过这种方式实现部署。动静分离动静分离就是让动态网站中的动态网页按照一定的规则把不变的资源和经常变化的资源区分开来。动静态资源拆分后,我们可以根据静态资源的特点进行缓存操作,这就是网站静态处理的核心思想upstreamtest{serverlocalhost:8080;serverlocalhost:8081;}server{listen80;server_namelocalhost;location/{roote:\wwwroot;index.html;}#所有静态请求都由nginx处理,存放目录为htmllocation~\.(gif|jpg|jpeg|png|bmp|swf|css|js)${roote:\wwwroot;}#所有动态请求都转发给tomcat进行处理wwwroot;}}所以我们可以把HTML、图片、css和js放在wwwroot目录下,而tomcat只负责处理jsp和请求。比如当我们的后缀为gif时,Nginx会默认从wwwroot获取当前请求的动态图片文件并返回。当然这里的静态文件是和Nginx是同一台服务器,我们也可以在另外一台服务器上使用,然后进行反向代理和负载均衡配置。只要了解最基本的流程,很多配置都非常简单。另外localtion后面其实还有一个正则表达式,所以非常灵活。正向代理正向代理,是指客户端和原始服务器(originserver)之间的一个服务器,为了从原始服务器获取内容,客户端向代理发送请求并指定目标(originserver),然后proxy将请求转发给原始服务器,并将获得的内容返回给客户端。客户端可以使用正向代理。当你需要使用你的服务器作为代理服务器时,你可以使用Nginx来实现正向代理,但是Nginx目前有个问题,就是不支持HTTPS。虽然一直去百度配置HTTPS的正向代理,但是最后发现代理还是不能用。当然也有可能是我的配置不对,希望知道正确方法的同志们留言说明。resolver114.114.114.1148.8.8.8;server{resolver_timeout5s;listen81;access_loge:\wwwroot\proxy.access.log;error_loge:\wwwroot\proxy.error.log;location/{proxy_passhttp://$host$request_uri;}}Resolver是配置正向代理的DNS服务器,listen是正向代理的端口。配置完成后,就可以使用服务器ip+端口号在IE或者其他代理插件上进行代理了。最后想说的是Nginx支持热启动。也就是说,我们修改配置文件后,可以在不关闭Nginx的情况下让配置生效。当然,我不知道有多少人知道这一点。反正我一开始不知道。因此,Nginx线程经常被杀死并重新启动。..Nginx重新读取配置的命令是nginx-sreloadwindows,下面是nginx.exe-sreload。最后,合理利用每一分每一秒去学习和提升自己,不要用“没时间”来掩盖自己精神上的懒惰!趁着年轻,好好努力,给未来的自己一个交代!明年春天找一份好工作
