前言
本文只针对Nginx在不加载第三方模块的状况能解决哪些事件,因为第三方模块太多所以也介绍不完,当然本文自身也可能介绍的不残缺,毕竟只是我集体应用过和理解到过得。所以还请见谅,同时欢送留言交换
Nginx能做什么
1、反向代理 2、[负载平衡] 3、HTTP服务器(蕴含动静拆散) 4、正向代理
以上就是我理解到的Nginx在不依赖第三方模块能解决的事件,上面具体阐明每种性能怎么做
【文章福利】小编举荐本人的linuxC/C++语言交换群:832218493!整顿了一些集体感觉比拟好的学习书籍、视频材料共享在群文件外面,有须要的能够自行添加哦!~
反向代理
反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)形式是指以代理服务器来承受internet上的连贯申请,而后将申请转发给外部网络上的服务器,并将从服务器上失去的后果返回给internet上申请连贯的客户端,此时代理服务器对外就体现为一个反向代理服务器。简略来说就是实在的服务器不能间接被内部网络拜访,所以须要一台代理服务器,而代理服务器能被内部网络拜访的同时又跟实在服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
上面贴上一段简略的实现反向代理的代码
server {
listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host:$server_port; }}
保留配置文件后启动Nginx,这样当咱们拜访localhost的时候,就相当于拜访localhost:8080了
负载平衡
负载平衡也是Nginx罕用的一个性能,负载平衡其意思就是摊派到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业要害应用服务器和其它要害工作服务器等,从而共同完成工作工作。简略而言就是当有2台或以上服务器时,依据规定随机的将申请散发到指定的服务器上解决,负载平衡配置个别都须要同时配置反向代理,通过反向代理跳转到负载平衡。而Nginx目前反对自带3种负载平衡策略,还有2种罕用的第三方策略。
1、RR(默认)
每个申请按工夫程序逐个调配到不同的后端服务器,如果后端服务器down掉,能主动剔除。
简略配置
upstream test { server localhost:8080; server localhost:8081;}server { listen 81; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; }}
负载平衡的外围代码为
upstream test { server localhost:8080; server localhost:8081;}
这里我配置了2台服务器,当然实际上是一台,只是端口不一样而已,而8081的服务器是不存在的,也就是说拜访不到,然而咱们拜访http://localhost 的时候,也不会有问题,会默认跳转到http://localhost:8080 具体是因为Nginx会主动判断服务器的状态,如果服务器处于不能拜访(服务器挂了),就不会跳转到这台服务器,所以也防止了一台服务器挂了影响应用的状况,因为Nginx默认是RR策略,所以咱们不须要其余更多的设置。
2、权重
指定轮询几率,weight和拜访比率成正比,用于后端服务器性能不均的状况。
例如
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1;}
那么10次个别只会有1次会拜访到8081,而有9次会拜访到8080
3、ip_hash
下面的2种形式都有一个问题,那就是下一个申请来的时候申请可能散发到另外一个服务器,当咱们的程序不是无状态的时候(采纳了session保留数据),这时候就有一个很大的很问题了,比方把登录信息保留到了session中,那么跳转到另外一台服务器的时候就须要从新登录了,所以很多时候咱们须要一个客户只拜访一个服务器,那么就须要用ip_hash了,ip_hash的每个申请按拜访ip的hash后果调配,这样每个访客固定拜访一个后端服务器,能够解决session的问题。
upstream test { ip_hash; server localhost:8080; server localhost:8081;}
4、fair(第三方)
按后端服务器的响应工夫来调配申请,响应工夫短的优先调配。
upstream backend { fair; server localhost:8080; server localhost:8081;}
5、url_hash(第三方)
按拜访url的hash后果来调配申请,使每个url定向到同一个后端服务器,后端服务器为缓存时比拟无效。 在upstream中退出hash语句,server语句中不能写入weight等其余的参数,hash_method是应用的hash算法
upstream backend { hash $request_uri; hash_method crc32; server localhost:8080; server localhost:8081;}
以上5种负载平衡各自实用不同状况下应用,所以能够依据理论状况抉择应用哪种策略模式,不过fair和url_hash须要装置第三方模块能力应用,因为本文次要介绍Nginx能做的事件,所以Nginx装置第三方模块不会再本文介绍
HTTP服务器
Nginx自身也是一个动态资源的服务器,当只有动态资源的时候,就能够应用Nginx来做服务器,同时当初也很风行动静拆散,就能够通过Nginx来实现,首先看看Nginx做动态资源服务器
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { root e:wwwroot; index index.html; }}
这样如果拜访http://localhost 就会默认拜访到E盘wwwroot目录上面的index.html,如果一个网站只是动态页面的话,那么就能够通过这种形式来实现部署。
动静拆散
动静拆散是让动静网站里的动静网页依据肯定规定把不变的资源和常常变的资源辨别开来,动静资源做好了拆分当前,咱们就能够依据动态资源的特点将其做缓存操作,这就是网站动态化解决的外围思路
upstream test{
server localhost:8080; server localhost:8081; } server { listen 80; server_name localhost; location / { root e:wwwroot; index index.html; } # 所有动态申请都由nginx解决,寄存目录为html location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ { root e:wwwroot; } # 所有动静申请都转发给tomcat解决 location ~ .(jsp|do)$ { proxy_pass http://test; } error_page 500 502 503 504 /50x.html; location = /50x.html { root e:wwwroot; } }
这样咱们就能够吧HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责解决jsp和申请,例如当咱们后缀为gif的时候,Nginx默认会从wwwroot获取到以后申请的动态图文件返回,当然这里的动态文件跟Nginx是同一台服务器,咱们也能够在另外一台服务器,而后通过反向代理和负载平衡配置过来就好了,只有搞清楚了最根本的流程,很多配置就很简略了,另外localtion前面其实是一个正则表达式,所以非常灵活
正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。客户端能力应用正向代理。当你须要把你的服务器作为代理服务器的时候,能够用Nginx来实现正向代理,然而目前Nginx有一个问题,那么就是不反对HTTPS,尽管我百度到过配置HTTPS的正向代理,然而到最初发现还是代理不了,当然可能是我配置的不对,所以也心愿有晓得正确办法的同志们留言阐明一下。
resolver 114.114.114.114 8.8.8.8;server { resolver_timeout 5s; listen 81; access_log e:wwwrootproxy.access.log; error_log e:wwwrootproxy.error.log; location / { proxy_pass http://$host$request_uri; }}
resolver是配置正向代理的DNS服务器,listen 是正向代理的端口,配置好了就能够在ie下面或者其余代理插件下面应用服务器ip+端口号进行代理了。
最初说两句
Nginx是反对热启动的,也就是说当咱们批改配置文件后,不必敞开Nginx,就能够实现让配置失效,当然我并不知道多少人晓得这个,反正我一开始并不知道,导致常常杀死了Nginx线程再来启动。。。Nginx从新读取配置的命令是
nginx -s reload
windows上面就是
nginx.exe -s reload