nginx负载均衡设置

/

软硬件环境

  • ubuntu 16.04 desktop 32bit
  • nginx 1.2.4

前言

在实际应用中,负载平衡是一种常见的技术,它用来优化利用资源、提高系统的吞吐量、减少访问等待时间并且有很好的容错性。在实际项目中刚好使用了nginx,本文介绍如何将nginx作为反向代理服务器来实现负载均衡,将流量分配到多个应用服务器上,提高整个系统的可用性、可靠性、扩展性和性能。

配置步骤

准备工作

准备3台服务器,分别为

​ 10.10.10.77 装有nginx web server

​ 10.10.10.188 应用服务器1

​ 10.10.10.107 应用服务器2

nginx我用的是1.2.4版本,从源码编译的,如果嫌麻烦的话,用apt-get install安装也行,2台应用服务器也分别安装了nginx,web root下的index.html做了区别。

为了查看效果,我们简单访问10.10.10.77,看看通过负载均衡的设置,最终访问的应用服务器到底是哪一台?

修改10.10.10.77服务器上的nginx.conf
  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 localhost {
  23. server 10.10.10.188:8081 weight=1;
  24. server 10.10.10.107:80 weight=5;
  25. }
  26. server {
  27. listen 80;
  28. server_name localhost;
  29. #charset koi8-r;
  30. #access_log logs/host.access.log main;
  31. location / {
  32. proxy_pass http://localhost;
  33. # root html;
  34. # index index.html index.htm;
  35. }
  36. #error_page 404 /404.html;
  37. # redirect server error pages to the static page /50x.html
  38. #
  39. error_page 500 502 503 504 /50x.html;
  40. location = /50x.html {
  41. root html;
  42. }
  43. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  44. #
  45. #location ~ \.php$ {
  46. # proxy_pass http://127.0.0.1;
  47. #}
  48. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  49. #
  50. #location ~ \.php$ {
  51. # root html;
  52. # fastcgi_pass 127.0.0.1:9000;
  53. # fastcgi_index index.php;
  54. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  55. # include fastcgi_params;
  56. #}
  57. # deny access to .htaccess files, if Apache's document root
  58. # concurs with nginx's one
  59. #
  60. #location ~ /\.ht {
  61. # deny all;
  62. #}
  63. }
  64. # another virtual host using mix of IP-, name-, and port-based configuration
  65. #
  66. #server {
  67. # listen 8000;
  68. # listen somename:8080;
  69. # server_name somename alias another.alias;
  70. # location / {
  71. # root html;
  72. # index index.html index.htm;
  73. # }
  74. #}
  75. # HTTPS server
  76. #
  77. #server {
  78. # listen 443;
  79. # server_name localhost;
  80. # ssl on;
  81. # ssl_certificate cert.pem;
  82. # ssl_certificate_key cert.key;
  83. # ssl_session_timeout 5m;
  84. # ssl_protocols SSLv2 SSLv3 TLSv1;
  85. # ssl_ciphers HIGH:!aNULL:!MD5;
  86. # ssl_prefer_server_ciphers on;
  87. # location / {
  88. # root html;
  89. # index index.html index.htm;
  90. # }
  91. #}
  92. }
测试

通过多次访问http://10.10.10.77可以看到,有的转向了10.10.10.188,有的转向了10.10.10.107,比例是1:5。

nginx_cdn_1

nginx_cdn_2

nginx的负载均衡策略

nginx 提供了轮询(Round Robin)、用户 IP 哈希(Client IP)和权重(Weight) 3 种方式。默认情况下使用的是轮询策略,这种方式比较好理解应用服务器的压力也很均衡。在上例中使用的是权重方式,根据设置的权重来分配client的请求。如果想长时间保持会话的话,就需要使用用户IP哈希的方式,这种方式保证了一个 client 每次请求都将到达同一个 应用服务器。如果所 hash 到的 应用服务器当前不可用,则请求会被转移到其他 应用服务器。

配置文件使用方法如下

  1. upstream localhost {
  2. ip_hash;
  3. server 10.10.10.188:8081;
  4. server 10.10.10.107:80;
  5. }

参考文献

转载请注明作者和出处,并添加本页链接。
原文链接: blog.xugaoxiang.com/67

给我留言