Nginx实现HTTP负载均衡

11 年 ago jony Nginx实现HTTP负载均衡已关闭评论

下面是配置nginx负载均衡的简单示例文件,主要作用是:
www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP。用户访问http://www.s135.com,将其负载均衡到192.168.1.2:80、92.168.1.3:80、192.168.1.4:80、192.168.1.5:80四台服务器。用户访问http://blog.s135.com,将其负载均衡到192.168.1.7服务器的8080、8081、8082端口。获取用户真实IP.

  1. user  www www;
  2. worker_processes 10;
  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. #最大文件描述符
  8. worker_rlimit_nofile 51200;
  9. events
  10. {
  11.       use epoll;
  12.       worker_connections 51200;
  13. }
  14. http
  15. {
  16.       include       conf/mime.types;
  17.       default_type  application/octet-stream;
  18.       keepalive_timeout 120;
  19.       tcp_nodelay on;
  20.       upstream  www.s135.com  {
  21.               server   192.168.1.2:80;
  22.               server   192.168.1.3:80;
  23.               server   192.168.1.4:80;
  24.               server   192.168.1.5:80;
  25.       }
  26.       upstream  blog.s135.com  {
  27.               server   192.168.1.7:8080;
  28.               server   192.168.1.7:8081;
  29.               server   192.168.1.7:8082;
  30.       }
  31.       server
  32.       {
  33.               listen  80;
  34.               server_name  www.s135.com;
  35.               location / {
  36.                        proxy_pass        http://www.s135.com;
  37.                        proxy_set_header   Host             $host;
  38.                        proxy_set_header   X-Real-IP        $remote_addr;
  39.                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  40.               }
  41.               log_format  www_s135_com  '$remote_addr - $remote_user [$time_local] $request '
  42.                                 '"$status" $body_bytes_sent "$http_referer" '
  43.                                 '"$http_user_agent" "$http_x_forwarded_for"';
  44.               access_log  /data1/logs/www.log  www_s135_com;
  45.       }
  46.       server
  47.       {
  48.               listen  80;
  49.               server_name  blog.s135.com;
  50.               location / {
  51.                        proxy_pass        http://blog.s135.com;
  52.                        proxy_set_header   Host             $host;
  53.                        proxy_set_header   X-Real-IP        $remote_addr;
  54.                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  55.               }
  56.               log_format  blog_s135_com  '$remote_addr - $remote_user [$time_local] $request '
  57.                                 '"$status" $body_bytes_sent "$http_referer" '
  58.                                 '"$http_user_agent" "$http_x_forwarded_for"';
  59.               access_log  /data1/logs/blog.log  blog_s135_com;
  60.       }
  61. }

这里主要用到两个模块:
1.HTTP负载均衡模块(HTTP Upstream),其中的一些字段解释:
server:指定后端服务器的名称和一些参数,可以使用域名,IP,端口,或者unix socket。如果指定为域名,则首先将其解析为IP。
upstream:这个字段设置一群服务器,可以将这个字段放在proxy_pass和fastcgi_pass指令中作为一个单独的实体,它们可以可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。
2.HTTP代理模块(HTTP Proxy)
这个模块可以转发请求到其他的服务器。
proxy_pass:这个指令设置被代理服务器的地址和被映射的URI,地址可以使用主机名或IP加端口号的形式
proxy_set_header:这个指令允许将发送到被代理服务器的请求头重新定义或者增加一些字段。这个值可以是一个文本,变量或者它们的组合。
参考网址:
HTTP代理模块(HTTP Proxy)
HTTP负载均衡模块(HTTP Upstream)
http://blog.s135.com/post/306/

本文出自 Linux服务器运维日志,转载时请注明出处及相应链接。

本文永久链接: https://www.centos.bz/2011/12/nginx-implement-httpd-load-balancing/

更多参考:

http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html      理论/原理

http://zyan.cc/post/306/

Nginx 负载均衡: 由理论到实践

http://www.ttlsa.com/nginx/nginx-load-balancing-from-theory-to-practice/

使用nginx作为HTTP负载均衡

http://www.ttlsa.com/nginx/using-nginx-as-http-loadbalancer/