Nginx 负载均衡配置实例

一)简单的配置

首先是配置十分的简单,而且功能非常强大。真是相见恨晚。先来看看配置文件怎么写吧。

worker_processes 1;  
events {  
	worker_connections 1024;  
}  
http{  
	upstream myproject {  
		#这里指定多个源服务器,ip:端口,80端口的话可写可不写  
		server 192.168.43.158:80;  
		server 192.168.41.167;  
	}  
	server {  
		listen 8080; 		
		location / {  
			proxy_pass http://myproject;  
		}  
	}  
} 
Nginx负载均衡有哪些功能呢?如果后面的服务器其中一台坏了,它能自动识别,更牛的是它好了之后Nginx可以马上识别服务器A和B,如果A的响应时间为3,B的响应时间为1,那么Nginx会自动调整访问B的概率是A的3倍,真正做到Nginx负载均衡好的,安装完成了。我在make的时候报了个错,说HTTP Rewrite 模块 有问题,我就./configure –without-http_rewrite_module,然后再make,make install就可以了。

安装好了之后新建一个配置文件,把上面的配置文件内容拷进去,当然要修改你的IP,保存为比如 load_balance.conf
然后启动:/usr/local/Nginx/sbin/Nginx -c load_balence.conf;由于Nginx的作者是俄国人,所以英文的文档也不是那么完善,对于我来说Nginx的最大优点还是配置简单,功能强大。我曾经配过 apache-jk,那真的不是一般人能配的。太复杂了,而且只能用来做tomcat的Nginx负载均衡。

二)应用配置

www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP。
  用户访问http://www.s135.com,将其负载均衡到192.168.1.2:80、192.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端口。
  以下为配置文件nginx.conf:

引用
user  www www;

worker_processes 10;

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

#pid        logs/nginx.pid;

#最大文件描述符
worker_rlimit_nofile 51200;

events 
{
      use epoll;
      worker_connections 51200;
}

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

      keepalive_timeout 120;

      tcp_nodelay on;

      upstream   www.s135.com  {
              server   192.168.1.2:80;
              server   192.168.1.3:80;
              server   192.168.1.4:80;
              server   192.168.1.5:80;
      }

      upstream  blog.s135.com  {
              server   192.168.1.7:8080;
              server   192.168.1.7:8081;
              server   192.168.1.7:8082;
      }

      server
      {
              listen  80;
              server_name   www.s135.com;

              location / {
                       proxy_pass         http://www.s135.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;
              }

              log_format  www_s135_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /data1/logs/www.log  www_s135_com;
      }

      server
      {
              listen  80;
              server_name  blog.s135.com;

              location / {
                       proxy_pass         http://blog.s135.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;
              }

              log_format  blog_s135_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /data1/logs/blog.log  blog_s135_com;
      }
}

  附:Nginx 的安装方法可参照《Nginx 0.5.31 + PHP 5.2.4(FastCGI)搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器》文章的以下段落(仅做负载均衡,无需支持PHP的安装方法):

  二、安装PHP 5.2.4(FastCGI模式)
  4、创建www用户和组,以及其使用的目录:

  三、安装Nginx 0.5.31
  1、安装Nginx所需的pcre库:
  2、安装Nginx
  3、创建Nginx日志目录
  5、启动Nginx

三)FastCGI配置

location ~ \.php$ {
            root           /var/www/;
            #fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass   fastcgiServers;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
            include        fastcgi_params;
        }

#my fastcgi proxy
    upstream fastcgiServers{
        server  10.1.54.167:9000;
        server  10.1.54.168:9000;
    }

四)常见问题

1、如果均衡的域名中有泛域名,或有几百个域名的话可以配置吗?
2、ngnix在做均衡的时候是否已经包含了cache功能?
3、ngnix---squid----apache取的的HTTP_X_FORWARDED_FOR是squid服务器的ip地址,如果想取真实客户端地址可以做到吗?

1、nginx.conf
server_name  .s135.com;   即可支持***.s135.com泛域名

2、nginx负载均衡只做反向代理,有简单的缓冲,但不像Squid那样将cache存在本机。

3、我已经在nginx.conf配置文件中增加:
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

编译squid时加上--enable-follow-x-forwarded-for
然后在squid.conf中输入一行:
follow_x_forwarded_for allow all

后端的Apache取日志(httpd.conf):
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %h %T" combined
取到的就是用户真实IP
4、想问一下,为什么本机不能也接受访问呢?例如:a、b、c三台机器,我在a上面如同上面配置的,为什么访问总是在b、c来回换,为什么a上也有网站却不被访问到呢?如果我也想访问a服务器上的网站需要如何处理?

当然可以。

upstream  myproject  {
	      server   127.0.0.1;//本机也作为server
              server   192.168.1.2:80;
              server   192.168.1.3:80;
              server   192.168.1.4:80;
              server   192.168.1.5:80;
      }

5、请问这三个是什么意思啊?能具体讲一下么。

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_set_header X-Real-IP $remote_addr;配合这个把真实的ip 发送给转发的web服务器,要不的话,接收请求的收到的请求ip都是nginx这台的 
6、安装php必须要用fastcgi模式吗?我用的是fpm的,但发现做负载均衡的时候发现访问/message/目录下的php文件的时候总是失效,系统自动在/下面去访问了,不知是什么原因的?

解决了,刚开始准备将负载均衡器也做为web使用,启用了以下代码 ,将这几行删除即可.

location ~ \.php$ {           
	root           html;             
	fastcgi_pass   127.0.0.1:9000;             
	fastcgi_index  index.php;             
	fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;            
	include        fastcgi_params;         
}

7、F5 有没有类似的负载均衡功能? 另外还有一个疑问:
客户端直接访问web服务器时,可以用HTTP_CLIENT_IP、REMOTE_ADDR 这几个变量看到客户端的IP。经过squid或者ngrnx之后,还能看到客户端的IP吗? 是不是要用HTTP_X_FORWARDED_FOR?

#F5 BIG-IP 就是用来做负载均衡的。经过squid或者ngrnx之后,看到客户端的IP,请用HTTP_X_FORWARDED_FOR。

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

8、负载均衡配置

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
#设定日志格式
access_log    /var/log/nginx/access.log;

#省略上文有的一些配置节点

#。。。。。。。。。。

#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
server 192.168.8.2x:80  weight=1;
server 192.168.8.3x:80  weight=6;
}

upstream mysvr2 {
#weigth参数表示权值,权值越高被分配到的几率越大

server 192.168.8.x:80  weight=1;
server 192.168.8.x:80  weight=6;
}

#第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen       80;
server_name  192.168.8.x;

#对aspx后缀的进行负载均衡请求
location ~ .*\.aspx$ {

root   /root;      #定义服务器的默认网站根目录位置
index index.php index.html index.htm;   #定义首页索引文件的名称

proxy_pass  http://mysvr ;#请求转向mysvr 定义的服务器列表

#以下是一些反向代理的配置可删除.
proxy_redirect off;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传

}

}
}

9、


10、


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值