一、什么是反向代理?
常日的代理做事器,只用于代理内部网络对Internet的连接要求,客户机必须指定代理做事器,并将本来要直接发送到Web做事器上的http要求发送到代理做事器中由代理做事器向Internet上的web做事器发起要求,终极达到客户机上网的目的(也便是正向代理)。
而反向代理(Reverse Proxy)办法是指以代理做事器来接管internet上的连接要求,然后将要求转发给内部网络上的做事器,并将从做事器上得到的结果返回给internet上要求连接的客户端,此时期理做事器对外就表现为一个反向代理做事器。
负载均衡建立在现有网络构造之上,它供应了一种廉价有效透明的方法扩展网络设备和做事器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵巧性和可用性。

负载均衡,英文名称为Load Balance,其意思便是分摊到多个操作单元上进行实行,例如Web做事器、FTP做事器、企业关键运用做事器和其它关键任务做事器等,从而共同完成事情任务。
三、Nginx是什么?能做什么?Nginx 是一个高性能的 Web 和反向代理做事器, 它具有有很多非常优胜的特性:
作为 Web 和反向代理做事器:比较 Apache,Nginx 利用更少的资源,支持更多的并发连接,表示更高的效率,这点使 Nginx 尤其受到虚拟主机供应商的欢迎。能够支持高达 50,000 个并发连接数的相应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开拓模型.
作为负载均衡做事器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理做事器 对外进行做事。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 利用效率都比 Perlbal 要好的多。
作为邮件代理做事器: Nginx 同时也是一个非常精良的邮件代理做事器(最早开拓这个产品的目的之一也是作为邮件代理做事器),Last.fm 描述了成功并且美妙的利用履历。
Nginx 安装非常的大略,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的做事器: Nginx 启动特殊随意马虎,并且险些可以做到724不间断运行,纵然运行数个月也不须要重新启动。你还能够在 不间断做事的情形下进行软件版本的升级。
以上便是我理解到的Nginx在不依赖第三方模块能处理的事情,下面详细解释每种功能怎么做
1. 反向代理反向代理该当是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; }}Shell
保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相称于访问 localhost:8080 了。
2. 负载均衡负载均衡也是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; } }Shell
负载均衡的核心代码为 -
upstream test { server localhost:8080; server localhost:8081; }Shell
这里配置了2台做事器,当然实际上是一台,只是端口不一样而已,而8081的做事器是不存在的,也便是说访问不到,但是我们访问 http://localhost 的时候,也不会有问题,会默认跳转到 http://localhost:8080 详细是由于Nginx会自动判断做事器的状态,如果做事器处于不能访问(做事器挂了),就不会跳转到这台做事器,以是也避免了一台做事器挂了影相应用的情形,由于Nginx默认是RR策略,以是我们不须要其他更多的设置。
2、权重
指定轮询几率,weight和访问比率成正比,用于后端做事器性能不均的情形。 例如
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1; }Shell
那么10次一样平常只会有1次会访问到8081,而有9次会访问到8080 -
3、ip_hash
上面的2种办法都有一个问题,那便是下一个要求来的时候要求可能分发到其余一个做事器,当我们的程序不是无状态的时候(采取了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到其余一台做事器的时候就须要重新登录了,以是很多时候我们须要一个客户只访问一个做事器,那么就须要用iphash了,iphash的每个要求按访问ip的hash结果分配,这样每个访客固定访问一个后端做事器,可以办理session的问题。
upstream test { ip_hash; server localhost:8080; server localhost:8081; }Shell
4、fair(第三方)
按后端做事器的相应韶光来分配要求,相应韶光短的优先分配。
upstream backend { fair; server localhost:8080; server localhost:8081; }Shell
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; }Shell
以上5种负载均衡各自适用不同情形下利用,以是可以根据实际情形选择利用哪种策略模式,不过fair和url_hash须要安装第三方模块才能利用,由于本文紧张先容Nginx能做的事情,以是Nginx安装第三方模块不会再本文先容
3. HTTP做事器Nginx本身也是一个静态资源的做事器,当只有静态资源的时候,就可以利用Nginx来做做事器,同时现在也很盛行动静分离,就可以通过Nginx来实现,首先看看Nginx做静态资源做事器
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { root E:/wwwroot; index index.html; } }Shell
这样如果访问 http://localhost 就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种办法来实现支配。
4. 动静分离动静分离是让动态网站里的动态网页根据一定规则把不变的资源和常常变的资源区分开来,动静资源做好了拆分往后,我们就可以根据静态资源的特点将其做缓存操作,这便是网站静态化处理的核心思路。
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; } }Shell
这样我们就可以把HTML以及图片和css以及js放到wwwroot目录下,而tomcat只卖力处理jsp和要求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前要求的动态图文件返回,当然这里的静态文件跟Nginx是同一台做事器,我们也可以在其余一台做事器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很大略了,其余localtion后面实在是一个正则表达式,以是非常灵巧
5. 正向代理正向代理,意思是一个位于客户端和原始做事器(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; } }Shell
resolver是配置正向代理的DNS做事器,listen 是正向代理的端口,配置好了就可以在ie上面或者其他代理插件上面利用做事器ip+端口号进行代理了。
Nginx是支持热启动的,也便是说当我们修正配置文件后,不用关闭Nginx,就可以实现让配置生效,当然我并不知道多少人知道这个,反正我一开始并不知道,导致常常杀去世了Nginx线程再来启动。。。Nginx重新读取配置的命令是 -
nginx -s reloadShell
windows下面便是
nginx.exe -s reload
原文链接:https://www.yiibai.com/nginx/nginx-main-use-scenes.html