(一)nginx upstream实现负载均衡

   Ngx_http_upstream_module模块可实现七层负载均衡,定义的服务器组可被proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass所引用,具体可以参考官方文档:

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

 

  1,当前的环境:

Nginx upstream IP:192.168.180.2

node1 : 192.168.180.2:8080

node2 : 192.168.180.3:8080

目前两台主机的服务都已经再跑如图:

wKioL1jsjiiTBJgqAABEsJG73qM704.png

wKiom1jsjinA6q21AAAyTS1Y870039.png

 2,nginx upstream配置

   (1)只定义http段的定义服务器组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
user   ftp ;
worker_processes  3;
worker_rlimit_nofile 65535;
events {
     use epoll;
     worker_connections  1024;
}
http {
     include       mime.types;
     default_type  application /octet-stream ;
     #include       proxy.conf;
     log_format yundns_log  '$server_name $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"' ;
     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;
     access_log on;
     server_tokens off;
     sendfile        on;
     tcp_nopush     on;
     server_names_hash_bucket_size 256;
     client_header_buffer_size 256k;
     #large_client_header_buffers 4 32k;
     large_client_header_buffers 4 256k;
     client_body_buffer_size 256k;
     client_header_timeout     3m;
     client_body_timeout 3m;
     send_timeout             3m;
     client_max_body_size 50m;
     keepalive_timeout  120;
     fastcgi_intercept_errors on;
     fastcgi_connect_timeout 300;
     fastcgi_send_timeout 300;
     fastcgi_read_timeout 300;
     #fastcgi_buffer_size 64k;
     #fastcgi_buffers 8 64k;
     #fastcgi_busy_buffers_size 128k;
     #fastcgi_temp_file_write_size 128k;
     fastcgi_buffer_size 128k;
     fastcgi_buffers 4 256k;
     fastcgi_busy_buffers_size 256k;
     fastcgi_temp_file_write_size 256k;
     gzip  on;
     gzip_min_length  1k;
     gzip_buffers     4 16k;
     gzip_http_version 1.0;
     gzip_comp_level 2;
     gzip_types       text /plain  application /x-javascript  text /css  application /xml ;
     gzip_vary on;
     #limit_req_zone $anti_SendSms zone=anti_SendSms:30m rate=1r/m;
     limit_req_zone $binary_remote_addr zone=anti_SendSms:30m rate=1r /m ;
      upstream guojinbao{
       ip_hash;
       server 192.168.180.2:8080;
       server 192.168.180.3:8080;
        }
     include server/*.conf;
}

    (2)定义虚拟主机段location区段的proxy_pass中服务器组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
         listen       443 ssl http2;
         server_name  localhost;
         #ssl                  on;
         ssl_certificate      guojinbao.geotrust.crt;
         ssl_certificate_key  guojinbao.geotrust.key;
         rewrite ^ /invitejoin/ (.*)\.htm[l]?$   /register .shtml?$1 last;
         index index.jsp index.html;
         root  /opt/static/home ;                            
   location ~ .* {
                                         proxy_pass http: //guojinbao ;
                                         proxy_set_header X-Real-IP $remote_addr;
                                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                         #proxy_set_header X-Forward-For $remote_addr;
                                         proxy_set_header Host $host;
                                 }
         }


3,测试:

把其中一台服务关闭先把192.168.180.2:8080服务关闭,看下能不能调到192.168.180.3这台服务器上

如下图:

wKiom1jsjxKza9WzAAAdlOYCiF8476.png

wKiom1jsjxPCen9wAAQcMiC9Y_Q108.png

可以正常访问说明服务已调到192.168.180.3这台服务器上,负载均衡已起作用。

备注:主要参数说明:

 server 192.168.0.30 weight=2;此处的weight为权重,默认为1;

 主要算法,rr,wrr,ip_hash等,可在upstream中定义;

 server 192.168.0.30 max_files=3 fail_timeout=30s;此处的max_files,fail_timeout为健康状态检测,超过3次未响应,超时30s,就从server列表中移除。

 server 192.168.0.30 backup;标记为备份

 server 192.168.0.30 down;标记为不可用,与ip_hash算法一同使用



二、Nginx fastcgi

 1、fastcgi全称为高速的通用网关接口,是HTTP服务器与动态脚本语言之间通信的接口,其工作模式与反向代理差不多,实现客户端请求的动静分离。


2 配置fastcfi_params

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
fastcgi_param  GATEWAY_INTERFACE  CGI /1 .1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
     server {
          listen       80;
          server_name  192.168.110.4;        ################域名可以有多个,用空格隔
          access_log   /data/nginx/log/nginx .access.log;
         index index.php  index.html;
        # root      /usr/local/nginx/html;
          root     /data/php ;
        # root    /data/test/php;
        # root    /data/www/php;
          error_page 500 502 503  /50x .html;                                                                   
          location =  /nginx-status  {                                                                          
                      stub_status on;                                                                         
                      access_log  off;                                                                        
                      allow 127.0.0.1;                                                                        
                      allow 192.168.180.4;                                                                    
                                   }             
      location ~ \.php$                                                                                       
          {                                                                                                   
             # root   /usr/local/nginx/html/zabbix;                                                           
              expires -1s;                                                                                    
              #index index.php  index.html;                                                                   
              fastcgi_split_path_info ^(.+\.php)(/.+)$;                                                       
              include fastcgi_params;                                                                         
              fastcgi_param PATH_INFO $fastcgi_path_info;                                                     
              fastcgi_index index.php;                                                                        
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;                               
              fastcgi_pass 127.0.0.1:9000;                                                                    
                                                                                                              
            }