应无所住,而生其心
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

nginx反向代理,负载均衡

7844人阅读 2019/5/5 20:17 总访问:4811976 评论:2 收藏:0 手机
分类: 软件架构


nginx介绍

 nginx是一个高效的反向代理工具,可以很方便的实现服务的负载均衡

 反向代理方式实际上就是一台负责转发的代理服务器,请求的时候不请求具体的服务器而已请求代理服务器nginx,

 然后nginx负责请求真正的服务器,然后返回给客户端。

也就是请求先到达nginx然后在由nginx负责转发到不同的服务中去,就可以达到不同服务器负载的效果了。

当然由于中间加了一层,相比直接请求服务器其实效率是会受一些影响的。



启动nginx

下载后nginx后解压如图

可以双击nginx.exe运行也可以使用命令行运行

 按住shift然后右键就可以看到:在此处打开命令窗口 快速的定位到nginx的解压位置

 然后运行:start nginx

会一闪而过,如果在进程中找到说明启动成功了

如果在进程中没有找到说明报错了

可以找到错误日志查看,logs里边的error.log


几个常见的错误


  1:10013: An attempt was made to access a socket in a way forbidden by its access permissions

       这个是由于和nginx里边设置的端口冲突了,比如默认的就是80端口被占用了,我这里是和iis的80端口占用,把iis关闭的就好  


  2:1113: No mapping for the Unicode character exists in the target multi-byte code page

        这个是因为中文目录问题,加入到英文目录中就好了



 成功之后访问可以看到

 

 

新建两个WebApi模拟不同服务器


 端口9000 返回value

 

 端口9001 返回value2

 


 配置nginx实现负载均衡

  1:在http节点下,加入upstream节点

  upstream 192.168.0.107
    {
       server 192.168.0.108:8081;
       server 192.168.0.108:8080;
    }

2:在server节点中的location加入proxy_passp配置了,反向代理的地址

      我们请求的地址就是这个

  

 整体配置效果如下:

 

  配置文件修改后使用命令nginx -s reload 重启一下服务

  到此一个简单的负载均衡就实现了

  我们请求的时候就不直接请求webapi的地址而是代理服务器的地址

   

  

除了负载均衡之外我们还可以配置每台服务器的权重比例

  可以根据不同服务器的性能来配置权重

  upstream 192.168.131.125
    {
       server 192.168.131.125:9000 weight=1;
       server 192.168.131.125:9001 weight=2;
    }

 权重越大访问次数就越多,比如这里端口9000的访问次数是1/3,端口9001访问次数是2/3


配置超时时间

location / {
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header Host $http_host;
     proxy_pass http://tnblog_phone;
     proxy_connect_timeout 6;#超时时间(秒)
}

 使用proxy_connect_timeout即可

此配置意思是,每个从Nginx分发的请求,连接到后台(服务器1)的连接如果超过6秒,则视为连接失败,Nginx会将此请求分发到另一台服务器。在一段时期内(默认应该是1分钟),后续的请求都不会再发送到(服务器1)了。过了一段时期后再送请求,又有可能把请求发送到(服务器1)。此时,只要超时一次,则在往后一段时间内不再往(服务器1)分发。



nginx 服务器重启命令,关闭

  nginx -s stop     :  关闭命令 

nginx -s reopen  :重新打开日志文件

nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

nginx -s reload  :修改配置后重新加载生效




但是这样会存在一个单点故障,就是nginx服务器挂了后,集群都不能用了

可以使用dns和nginx配合的负载均衡,去掉单点故障,没有必要都要经过一个服务器转发,直接通过dns把请求转发到不同的服务器上

当然可以是一个nginx服务器


nginx配置负载均衡注意事项:http://www.tnblog.net/aojiancc2/article/details/141

niginx处理静态资源:http://www.tnblog.net/aojiancc2/article/details/2478



欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价