负载均衡

  • 推荐 laravel-社区Nginx 常用配置,这个讲解很详细
  • (实用篇)nginx配置文件详解中文版
    推荐nginx的配置、虚拟主机、负载均衡和反向代理
  • 负载均衡的配置其实非常简单
    vi /etc/nginx/site-avilible/long
#可以将long里面的所有代码删除,复制粘贴一下内容即可生效负载均衡
#这个写在server模块上面
upstream a.com {
  server  192.168.1.127:80;  #有多少个服务器就添加多少个ip
  server  192.168.1.127:8080;  #有多少个服务器就添加多少个ip
}
server {
        listen 80 ;
        server_name long;
# localtion里面
        location / {
        proxy_pass         http://a.com;   #这个地址一定是上面定义的负载均衡的名字
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
   }

也可以加上以下两种轮训方式

1.weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream a.com {
    server 192.168.1.127:80 weight=5;
    server 192.168.1.127:8080 weight=10;
}
2.ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream a.com {
                  ip_hash;   //实现轮询 ,一个电脑再次访问一个网站时,所访问的服务器不变
                  192.168.1.127:80 weight=2; //weight是权重默认是1数值越大,被访问到的概率越大。(加weight的时候,必须去掉ip_hash)   //自己的网站的IP
                  192.168.1.127:8080;  //自己网站的IP
            }
  • 注意,server后面只能写ip,不可以写站点名
  • 我们也可以只在一个服务器上做测试,只需要复制下site-avilable/default并改称不冲突的端口号即可。我这里改成了8080端口

upstream模块:upstream指令主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用代理服务器,默认负载均衡方式为轮询 ip_hash(轮询)和weight(权重)是互斥的,只可以选择使用一种方式

动静分离的配置

#可以将long里面的所有代码删除,复制粘贴一下内容即可生效负载均衡
upstream static {
server  192.168.1.127:80;  #这个对应default站点
}
upstream php {
server  192.168.1.127:8080;  #这个对应jin站点,我们要在
}
server {
      listen 80 ;
      server_name long;
index index.html index.php index.htm index.nginx-debian.html;
# localtion里面

      location / {
#此处我不知道为什么这样写,我想静态的我们一般都用html
# 根据匹配php的写法,我改成   location  ~\.html${  测试发现也是可以的
      proxy_pass         http://static;   #这个地址一定是上面定义的负载均衡的名字
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      }
         location ~ \.php$ { #匹配php文件用这个代理
        proxy_pass         http://php;   #这个地址一定是上面定义的负载均衡的名字
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
 }

# 上面的upstream内容,严格来说不应该写在`/etc/nginx/site-avilible/long`里面,
我们应该写在`cd /etc/nginx/con.d`文件夹里。这个文件夹是个个空文件夹
`vim upstream.conf`(注意,此处名字可以随便写,但必须以.conf为后缀)

upstream static {
server  192.168.1.127:80;  #这个对应default站点
}
upstream php {
server  192.168.1.127:8080;  #这个对应jin站点,我们要在
}

实验。我们在fefault对应的站点下写index.html,test.html,在jin对应的站点下面写index.php,test.php;此时我们访问http://long/index.html,http://index.php,得到的结果分别就是我们相应站点下面的内容



user  nginx nginx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    use epoll;
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    #Tomcat的服务器集群
    upstream up {
    server 101.1.1.1 weight=5 max_fails=2 fail_timeout=30;  
    server 101.2.2.2 weight=5 max_fails=2 fail_timeout=30 down;
    }

    server {
        listen       80;
        server_name  123.com  test.com;
        root            /usr/local;

        if ($host = test.com) {
            return   301 https://$host$request_uri;
        }

          #java服务器提供api的公共服务
        location ^~ /test {
          proxy_pass http://up/test;
          proxy_cookie_path /up/ /;
          
          proxy_redirect off;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_connect_timeout   10;
          proxy_send_timeout      30;
          proxy_read_timeout      90;
        }
    }


    # HTTPS server
    #
    server {
         listen       443 ssl;
         server_name  kjzb.com;

         ssl_certificate      /usr/local/nginx/conf/kjzb_com.crt;
         ssl_certificate_key  /usr/local/nginx/conf/kjzb_com.key;


    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

        location / {
                    root   html/icp;
                #如果是手机移动端访问内容
                   if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
                           {
                                      root html/m.icp;
                           }     
                index  index.html index.htm;
                
          }
        location ~ \.php$ {
               root       html/icp;
             if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
                {
                                root html/m.icp;
                }     
                fastcgi_pass   127.0.0.1:9000; 
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;                                                               fastcgi_param HTTPS on;
                include        fastcgi_params;
        }
 }
}

nginx实现屏蔽IP

手册-Module ngx_stream_access_module

随便写一个 .conf结尾的配置文件, 比如我们此处用 ip.conf文件

ip.conf 文件
# 屏蔽127.0.0.1
 deny 127.0.0.1; 
# 屏蔽所有ip
deny all;
# 允许127.0.0.1,192.168.1.1
 allow 127.0.0.1; 
 allow 192.168.1.1;
# 允许所有ip进入
allow all;
#屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令
deny 123.0.0.0/8
#屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
deny 123.45.6.0/24


 然后进入配置文件的`http`模块,或者`server`文件,或者`server`里面的`localtion`匹配模块都可以
但是我们大多的需求其实是在 server里面

你可能感兴趣的:(负载均衡)