nginx学习(四)nginx 负载均衡简单实现

2018年2月28日16:14:35
  • A+
所属分类:Nginx
nginx能够实现负载均衡,在被反向代理的服务器中进行按需的负载均衡配置:
下面是一个配置文件:
[plain] view plain copy

  1. #user  nobody;
  2. worker_processes  1;
  3. #error_log  logs/error.log;
  4. #error_log  logs/error.log  notice;
  5. #error_log  logs/error.log  info;
  6. #pid        logs/nginx.pid;
  7. events {
  8.     worker_connections  1024;
  9. }
  10. http {
  11.     include       mime.types;
  12.     default_type  application/octet-stream;
  13.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  14.     #                  '$status $body_bytes_sent "$http_referer" '
  15.     #                  '"$http_user_agent" "$http_x_forwarded_for"';
  16.     #access_log  logs/access.log  main;
  17.     sendfile        on;
  18.     #tcp_nopush     on;
  19.     #keepalive_timeout  0;
  20.     keepalive_timeout  65;
  21.     #gzip  on;
  22.     upstream backend {
  23.              #ip_hash;
  24.              server 192.168.1.120:8989 weight=5;
  25.              server 192.168.1.120:8080 weight=10;
  26.          }
  27.     server {
  28.         listen       9922;
  29.         server_name  firstProxyServer;
  30.         #charset koi8-r;
  31.         #access_log  logs/host.access.log  main;
  32.         #location / {
  33.            #root   html;
  34.             #index  index.html index.htm;
  35.         #}
  36.         location /ngtt{
  37.             proxy_pass http://backend/ngtt;
  38.         }
  39.         location /testnnnn{
  40.             proxy_pass http://localhost:8080/testnnnn;
  41.         }
  42.         #error_page  404              /404.html;
  43.         # redirect server error pages to the static page /50x.html
  44.         #
  45.         error_page   500 502 503 504  /50x.html;
  46.         location = /50x.html {
  47.             root   html;
  48.         }
  49.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  50.         #
  51.         #location ~ \.php$ {
  52.         #    proxy_pass   http://127.0.0.1;
  53.         #}
  54.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  55.         #
  56.         #location ~ \.php$ {
  57.         #    root           html;
  58.         #    fastcgi_pass   127.0.0.1:9000;
  59.         #    fastcgi_index  index.php;
  60.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  61.         #    include        fastcgi_params;
  62.         #}
  63.         # deny access to .htaccess files, if Apache's document root
  64.         # concurs with nginx's one
  65.         #
  66.         #location ~ /\.ht {
  67.         #    deny  all;
  68.         #}
  69.     }
  70.      server {
  71.         listen       9977;
  72.         server_name  secondProxyServer;
  73.         #charset koi8-r;
  74.         #access_log  logs/host.access.log  main;
  75.         #location / {
  76.            #root   html;
  77.             #index  index.html index.htm;
  78.         #}
  79.         location / {
  80.             proxy_pass http://localhost:8080;
  81.         }
  82.         #error_page  404              /404.html;
  83.         # redirect server error pages to the static page /50x.html
  84.         #
  85.         error_page   500 502 503 504  /50x.html;
  86.         location = /50x.html {
  87.             root   html;
  88.         }
  89.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  90.         #
  91.         #location ~ \.php$ {
  92.         #    proxy_pass   http://127.0.0.1;
  93.         #}
  94.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  95.         #
  96.         #location ~ \.php$ {
  97.         #    root           html;
  98.         #    fastcgi_pass   127.0.0.1:9000;
  99.         #    fastcgi_index  index.php;
  100.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  101.         #    include        fastcgi_params;
  102.         #}
  103.         # deny access to .htaccess files, if Apache's document root
  104.         # concurs with nginx's one
  105.         #
  106.         #location ~ /\.ht {
  107.         #    deny  all;
  108.         #}
  109.     }
  110.     # another virtual host using mix of IP-, name-, and port-based configuration
  111.     #
  112.     #server {
  113.     #    listen       8000;
  114.     #    listen       somename:8080;
  115.     #    server_name  somename  alias  another.alias;
  116.     #    location / {
  117.     #        root   html;
  118.     #        index  index.html index.htm;
  119.     #    }
  120.     #}
  121.     # HTTPS server
  122.     #
  123.     #server {
  124.     #    listen       443 ssl;
  125.     #    server_name  localhost;
  126.     #    ssl_certificate      cert.pem;
  127.     #    ssl_certificate_key  cert.key;
  128.     #    ssl_session_cache    shared:SSL:1m;
  129.     #    ssl_session_timeout  5m;
  130.     #    ssl_ciphers  HIGH:!aNULL:!MD5;
  131.     #    ssl_prefer_server_ciphers  on;
  132.     #    location / {
  133.     #        root   html;
  134.     #        index  index.html index.htm;
  135.     #    }
  136.     #}
  137. }

其中主要的内容是这里:

[plain] view plain copy

  1. upstream backend {
  2.              #ip_hash;
  3.              server 192.168.1.120:8989 weight=5;
  4.              server 192.168.1.120:8080 weight=10;
  5.          }
  6.     server {
  7.         listen       9922;
  8.         server_name  firstProxyServer;
  9.         #charset koi8-r;
  10.         #access_log  logs/host.access.log  main;
  11.         #location / {
  12.            #root   html;
  13.             #index  index.html index.htm;
  14.         #}
  15.         location /ngtt{
  16.             proxy_pass http://backend/ngtt;
  17.         }
  18.         location /testnnnn{
  19.             proxy_pass http://localhost:8080/testnnnn;
  20.         }
  21.         #error_page  404              /404.html;
  22.         # redirect server error pages to the static page /50x.html
  23.         #
  24.         error_page   500 502 503 504  /50x.html;
  25.         location = /50x.html {
  26.             root   html;
  27.         }
  28.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  29.         #
  30.         #location ~ \.php$ {
  31.         #    proxy_pass   http://127.0.0.1;
  32.         #}
  33.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  34.         #
  35.         #location ~ \.php$ {
  36.         #    root           html;
  37.         #    fastcgi_pass   127.0.0.1:9000;
  38.         #    fastcgi_index  index.php;
  39.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  40.         #    include        fastcgi_params;
  41.         #}
  42.         # deny access to .htaccess files, if Apache's document root
  43.         # concurs with nginx's one
  44.         #
  45.         #location ~ /\.ht {
  46.         #    deny  all;
  47.         #}
  48.     }

其中权重weight越大,优先级越高。

进行测试的时候是这样,通过对一个服务器进行关闭,然后查看访问时宕机的次数。比如现在两台服务器都开启,现在关闭其中的一台——192.168.1.120:8989,然后再次进行访问,访问完成后,发现没3次会有一次出现宕机的现象。
如果发现了宕机,那么管理员此时可以直接这样配置:
[plain] view plain copy

  1. upstream backend {
  2.              #ip_hash;
  3.              server 192.168.1.120:8989 down;
  4.              server 192.168.1.120:8080 weight=10;
  5.          }

然后,输入nginx命令:

nginx -s reload即可恢复正常的访问。
此时全力恢复192.168.1.120:8989,恢复成功后,把nginx的配置文件更改回来,再次重新启动(nginx -s reload)即可。
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: