zoukankan      html  css  js  c++  java
  • Nginx+iis 负载均衡

     http://www.cnblogs.com/yanweidie/archive/2015/07/19/4658136.html
    上文是详解 
    此文是学习总结 

    解压nginx-1.9.3.zip

    配置conf/nginx.conf

    修改nginx监听端口,修改http server下的listen节点值,由于本机80端口已经被占用,我改为监听8083端口。

       listen       8083;

      在http节点下添加upstream(服务器集群),server设置的是集群服务器的信息,我这里搭建了两个站点,配置了两条信息。

        #服务器集群名称为Jq_one
        upstream Jq_one {
       server  127.0.0.1:9000; 
       server  127.0.0.1:8082; 
        }

     在http节点下找到location节点修改

      location / {
                root   html;
                index  index.aspx index.html index.htm; #修改主页为index.aspx
         #其中jq_one 对应着upstream设置的集群名称
         proxy_pass         http://Jq_one; ;
         #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
         proxy_set_header   Host             $host; 
         proxy_set_header   X-Real-IP        $remote_addr; 
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
     }

    修改完成配置文件以后记得重启nginx服务,最终完整配置文件信息如下

    虽然我们搭建好了负载均衡站点,但是还存在以下问题。

      1.如果站点使用了session,请求平均分配到两个站点,那么必然存在session共享问题,该如何解决?

    · 使用数据库保存session信息

    · 使用nginx将同一ip的请求分配到固定服务器,修改如下。ip_hash会计算ip对应hash值,然后分配到固定服务器

      upstream Jq_one{
        server 127.0.0.1:8082 ;
        server 127.0.0.1:9000 ;
         ip_hash;
      }

    · 搭建一台Redis服务器,对session的读取都从该Redis服务器上读取。后面的文章将介绍分布式缓存Redis的使用

      2.管理员更新站点文件,该怎么操作,现在还只有两台服务器,可以手工将文件更新到两台服务器,如果是10台呢,那么手工操作必然是不可行的

    · 多服务器站点更新可以使用GoodSync 文件同步程序,会自动检测文件的修改新增,然后同步到其它服务器上。在linux下可以使用rsync

      3.站点中的文件上传功能会将文件分配到不同的服务器,文件共享问题如何解决。

    · 使用文件服务器将所有文件存储到该服务器上,文件操作读取写入都在该服务器上。这里同样会存在一个问题,文件服务器存在读写上限。

      4.负载的服务器配置不一样,有的高有的低可不可以让配置高的服务器处理请求多一些

    · 这里讲一下,负载均衡有好几种算法  轮转法,散列法, 最少连接法,最低缺失法,最快响应法,加权法。我们这里可以使用加权法来分配请求。

         upstream Jq_one{
        server 127.0.0.1:8082 weight=4;
        server 127.0.0.1:9000 weight=1;
      }

         通过weight设置每台服务器分配请求站的权重,值越高分配的越多。

     5.由于请求是经过nginx转发过来的,可以在代码里面获取到用户请求的实际ip地址吗?

    · 答案是肯定的,在localtion节点设置如下请求头信息

        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
         proxy_set_header   Host             $host; 
         proxy_set_header   X-Real-IP        $remote_addr; 
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        代码里面通过Request.Headers["X-Real-IP"],就能获取到真实ip

     6.nginx实现静态文件(image,js,css)缓存

    · 在server节点下添加新的localtion

    ·  #静态资源缓存设置
     location ~ .(jpg|png|jpeg|bmp|gif|swf|css)$
            { 
                expires 30d;
                root /nginx-1.9.3/html;#root:  #静态文件存在地址,这里设置在/nginx-1.9.3/html下
                break;
            } 

    这是index页面的代码 <li><img src="/images/1.jpg"/></li> 

    QQ:83199235
  • 相关阅读:
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
  • 原文地址:https://www.cnblogs.com/softcg/p/6510912.html
Copyright © 2011-2022 走看看