使用nginx来负载均衡 本文在window与linux下配置nginx实现负载

实现网站负载有两种办法,一种是购买硬件来实现,比如是硬件F5再到Citrix Netscalar,这些设备都几十万,不是一般人玩的,另一种是使用软件来实现,比如nginx,squid这类有反向代理功能的软件,本文就nginx安装实现负载。

首先是windows系统,这里建议使用window 2003企业版,而不要作用win7(太新了,我遇到无法启动nginx的问题)。要说的是,在windows下配置安装nginx还是很容易的,少了 linux下下载tar再配置编译参数等等步骤,我们只要从下面的地址下载相应的zip包(大约750kb)即可,地址如下:

http://sysoev.ru/nginx/nginx-0.8.21.zip

需要说明的是这个下载包是nginx 0.8.21开发版,换句话说其只能用于搭建测试环境等用途的,不能用于实际的生产环境(受限于windows文件句柄数限制)。

下载并将该包中的文件解压到c盘上,为了配置使用方便,我将其解压后的文件夹名称从“nginx-0.8.19”改为"nginx”,这样我们只要将要负载均衡的站点在iis中设置好之后,将相应的链接地址放到nginx的相应配置文件中即可,这里我们打开C:\nginx\conf \nginx.conf文件,将下面的内容放到该文件的“server { ”上方行处:

upstream  mylocalsite {  
     server   10.0.2.137:8088;
     server   10.0.2.137:8089; 
}

因为nginx无法运行动态脚本,所以这里要使用proxy_pass属性进行代理,所以找到该配置文件的如下内容:

location / {
           root   html;
           index  index.html index.htm;
}

修改其内容如下:

location / {
            proxy_pass http://mylocalsite;
}

修改完之后,还要修改一下server的侦听端口,原内容如下:

server {
      listen       80;
      server_name  localhost; 
      ……

修改完后的内容如下:

server {
        listen       8086;
        server_name  10.0.2.136; 
        ……

这样,nginx就会在启动之后开始侦听本地IP(10.0.2.136)的8086端口请求,然后将其请求转向到mylocalsite 中所指定的两个iis站点,并将执行的结果转发给客户端。如果一切配置正确,这时可以运行 c:/nginx/nginx.exe (或在cmd下运行“start nginx”),就可以在任务管理器中看到一个nginx进程启动了。(注:如果配置文件有错误,可以到C:\nginx\logs\error.log 查看错误日志,进一步排错)。

注: 关闭ngnix的命令: nginx -s stop

配置文件ngnix.conf正确性判断的命令: nginx -t 

当然Nginx 负载均衡的功能也是很强的,并且其一般作为七层负载均衡(应用协议层)。下面就其upstream所支持的四个常用设置进行说明:

1)、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down掉,能自动剔除。
2)、weight :指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、 ip_hash :每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、 fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
4)、url_hash(第三方)

按上面的说明,可以将之前我们的upstream做如下修改:

upstream  mylocalsite {  
     server   10.0.2.137:8088 weight=2;
     server   10.0.2.137:8089 weight=1; 
}

这个当来了三个http请求时,其中的两个会被分配到10.0.2.137:8088 上,一个分配到10.0.2.137:8089 。当然一开始可以其分摊的请求可以不是太严格按其设置,但当请求数多了之后,基本上就接近于我们分指派的权值了。当然就负载均衡的算法而言,使用 weight只是其中的一种,而经常使用的还有许多,比如lvs就在其内部实现了多种的负载均衡算法,可以根据用户的实际环境进行设置布署。。当然就目前而言,nginx的算法相比较还是少了许多,呵呵。

可以说在windows下安装配置还是很方便的,但如果使用loadrunner做并发测试时,就会发现其logs/error.log就会报如下错误:

maximum number of descriptors supported by select() is 1024 while connecting to upstream

我曾经在网上查过解决方案,包括修改配置文件的worker_connections ,如下:

worker_rlimit_nofile 20240; 
     events {
         #use epoll;//linux 下使用
          worker_connections  20240;
     }

但依旧不能将文件句柄数扩充到20240,还是报1024最大句柄数错误。最后实在没办法了,只得开始尝试在linux下安装配置nginx。也就引发了下面的内容。

其实在网上有关介绍如何在linux下安装nginx的要比windows下的要多得多,必定这是‘本家'吧。

因为之前网管只在虚拟机上安装了CentOS5,所以只能就尝试在该linux分支版本下安装了。好在虚拟机已安装完了,剩下的工作并不太多。

首先需要以root身份登陆系统,然后切换身份为超级管理员:

然后进入到src目前下,并在当前目录下download nginx.tar.gz包

cd /usr/src      # 将文件下载到这个目录
     wget http://sysoev.ru /nginx/nginx-0.7.62.tar.gz# 下载安装包
     tar xzvf nginx- 0.6.34.tar.gz   #解压

如果下载的nginx 中默认可能没有 rewirte规则,因此需要下载pcre包的扩展来实现这个功能:

wget http://syslab.comsenz.com /downloads/linux/pcre-7.8.tar.bz2    # 下载pcre
      tar xjvf pcre- 7.8.tar.bz2                   # 解压pcre

下面编译安装pcre

cd /usr/src/pcre-7.8;
 ./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties

下面编译安装nginx

开始配置要编译的参数(注:内容较长,容易输错。具体参数设置参见http://wiki.codemongers.com/NginxChsInstall

./configure --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx  --conf-path=/usr/local/nginx/conf/nginx.conf
--error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log
--pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock
--http-client-body-temp-path=/dev/shm/nginx_temp/client_body --http-proxy-temp-path=/dev/shm/nginx_temp/proxy
--http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi
--user=www --group=www --with-cpu-opt=pentium4 --without-select_module --without-poll_module
--with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module
--without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module
--without-http_map_module" #如要取消ssl可去掉该项
--without-mail_pop3_module --without-mail_imap_modul --without-mail_smtp_module --with-pcre=/usr/local/pcre/lib

接下来就开始编译生成相应的文件了:

make
   make install

然后/dev/shm 也就是内存中,建立一个nginx_temp文件夹

   接着创建www用户和组,以及其使用的目录:

/usr/sbin/groupadd www -g 48 
   /usr/sbin/useradd -u 48 -g www www 
   mkdir -p /data0/vshare/htdocs 
   chmod +w /data0/vshare/htdocs 
   chown -R www:www /data0/vshare/htdocs

这时可以扩充一下文件句柄数(windows下就没这么容易扩展了,哎)

到这里,我们就可以使用linux下的vi编辑器编辑一下:

cd /usr/src/nginx-0.7.62/conf/ 
   vi nginx.conf

将之前在window下的修改内容替换(按下insert键进入到编辑模式)到当前的文件中,当修改完成了,按冒号(":")切换到命令模式下,然后敲入 “wq”,保存并退出。(强制退出(不保存)的话,输入q!,然后回车)

注:

events { 
            use epoll; 
            worker_connections  20240;
     }

注:use epoll; //linux下使用,更多内容参见NginxChsOptimizations

这样就可以运行nginx了:

启动完成后,可以通过如下指令查看其在内存中的运行信息:

# ps aux | egrep '(PID|nginx)'

这样当我们再使用loadrunner运行时,就可以看到error.log中就不再报那个恼人的“1024错误了”。

当然在nginx中,还支持文件缓存,以便于将那些静态文件缓存到本地的nginx服务器上,只不过要修改一下其config文件配置,如下:

vi nginx.conf

在文件中的相应节点处输入如下内容:

location ~ .*\. (gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {        #指定缓存文件类型
       expires 7d;      # 设置浏览器过期时间7天
       root data/nginx_cache/iis;          #静态文件根目录目录(必须对应proxy_temp_path)
       proxy_store on;        #开启缓存机制
       proxy_store_access user:rw group:rw all:rw;       # 缓存读写规则
       proxy_temp_path data/nginx_cache/iis;            #存放静态文件的缓存目录
   #    include proxy.conf;          # 外联proxy理的详细配置如 proxy_set_header, client_max_body_size .
        if (!-e $request_filename) { 
              proxy_pass http://10.0.2.136;/
        }
   }

这样就会在data/nginx_cache/iis目前下生成相应的gif,jpg等文件的临时信息,当客户端请求到来时,就会从该目录中检索相应文件绑定之后返回给客户端,以减轻iis服务器和网络带宽的压力。

最后附上一个我在那台Centos上的配置文件,大家可以对比参照一下,因为nginx本身提供的配置结点信息过多,更多信息可以参见这篇文章

相关链接如下:

张宴 搭建胜过Apache十倍的Web服务器(第5版)[原创]

守住每一天(网名)       nginx反向代理配置及优化

原文链接: http://www.cnblogs.com/daizhj/archive/2009/11/03/1595292.html

作者: daizhj, 代震军

Tags: nginx,负载均衡

(0)

相关推荐

  • linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广,可以对所有应用做负载均衡: 4.不支持正则处理,不能做动静分离. 常用四种算法: 1.rr:轮叫,轮流分配到后端服务器: 2.wrr:权重轮叫,根据后端服务器负载情况来分配: 3.lc:最小连接,分配已建立连接最少的服务器上: 4.wlc:权重最小连接,根据后端服务器处理能力来分配. 可以采用ip

  • LVS(Linux Virtual Server)Linux 虚拟服务器介绍及配置(负载均衡系统)

    一,简介 LVS(Linux Virtual Server) 是Unix-like系统中的一个虚拟服务器,是国内贡献给开源组织的一个最优秀的项目之一.LVS在Unix-like系统中 是作为一个前端(Director)存在的,又称为调度器,它本身不提供任何的服务,只是将通过互联网进来的请求接受后再转发给后台运行的真正的 服务器(RealServer)进行处理,然后响应给客户端. LVS有两个重要的组件:一个是IPVS,一个是IPVSADM.ipvs是LVS的核心组件,它本身只是一个框架,类似于i

  • linux负载均衡总结性说明 四层负载和七层负载有什么区别

    在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 一.什么是负载均衡 1)负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间:其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点

  • Linux双网卡绑定实现负载均衡详解

    Linux双网卡绑定实现负载均衡,供大家参考,具体内容如下 系统环境:CentOS release 6.9 (Final) Linux centos6 2.6.32-696.10.1.el6.x86_64 Ubuntu系统下使用ifenslave进行网卡配置,方法大同小异. 关闭NetworkManager # service NetworkManager stop # chkconfig NetworkManager off 创建bond0接口配置文件 # cd /etc/sysconfig/

  • 详解Linux系统配置nginx的负载均衡

    详解Linux系统配置nginx的负载均衡 负载均衡的几种方式: 1.轮询:默认按照时间顺序对所有服务器一个一个的访问,如果有服务器宕机,会自动剔除: 2.weight:服务器的方位几率和weight成正比,这个可以在服务器配置不均的时候进行配置: 3.ip_hash:对每个请求的ip进行hash计算,并按照一定的规则分配对应的服务器(可解决session共享): 4.fair:按照每台服务器的响应时间(rt)来分配请求,rt知道优先分配: 5.url_hash:按照访问url的hash值来分配

  • Red Hat Linux,Apache2.0+Weblogic9.2负载均衡集群安装配置

    ************************************************************************************************************************ JDK安装步骤 1. 以root身份登录系统 2. 到java.sun.com去下载JDK1.5 for LINUX的rpm,是个jdk-1_5_0_11-linux-i586-rpm.bin的文件. 3. 通过chmod +x jdk-1_5_x-rc-l

  • linux下Nginx+Tomcat负载均衡配置方法

    Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/ 下. #然后配置

  • 使用nginx来负载均衡 本文在window与linux下配置nginx实现负载

    实现网站负载有两种办法,一种是购买硬件来实现,比如是硬件F5再到Citrix Netscalar,这些设备都几十万,不是一般人玩的,另一种是使用软件来实现,比如nginx,squid这类有反向代理功能的软件,本文就nginx安装实现负载. 首先是windows系统,这里建议使用window 2003企业版,而不要作用win7(太新了,我遇到无法启动nginx的问题).要说的是,在windows下配置安装nginx还是很容易的,少了 linux下下载tar再配置编译参数等等步骤,我们只要从下面的地

  • Nginx负载均衡以及动静分离的原理与配置

    目录 一.Nginx实现负载均衡原理 二.Nginx动静分离原理 Nginx 静态处理优势 三.Nginx + Tomcat 动静分离.负载均衡配置步骤 环境准备: 动静分离配置 Nginx 负载均衡模式 总结 一.Nginx实现负载均衡原理 Nginx实现负载均衡是通过反向代理实现 Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发. 但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat

  • linux下安装nginx(图文教程)

    Nginx是一款轻量级的Web 服务器.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.以下主要介绍linux下安装nginx. linux系统为Centos 64位 简介 一.Linux安装软件常用方法 1.rpm(或pkg)安装,类似于Windows安装程序,是预编译好的程序. 使用的是通用参数编译,配置参数不是最佳 可控制性不强,比如对程序特定组件的定制性安装 通常安装包间有复杂依赖关系,操作比较复杂 安装简单,出错机率低 2.yum(或apt

  • 详解Ubuntu18.04下配置Nginx+RTMP+HLS+HTTPFLV服务器实现点播/直播/录制功能

    2019.9.4更新 继续玩又发现个好玩的东西,nginx-http-flv-module模块,集成了之前的RTMP模块,又有httpflv模块,还是咱们国内程序员大神开发维护,真是开心,国内的大神如此出色,为他们这些愿意分享技术的人点32个赞,具体的编译和安装方式与RTMP模块基本一样,配置readme中也说得很详细,就不赘述了,需要注意的一点是,httpflv方式客户端想看也是需要服务设置cors的,这点readme中没有提到好像. 2019.6.27更新 再更新个windows版本的搭建方

  • Goland 的安装及激活教程(window、linux下安装)

    前言 前面我们已经将GO的环境安装好了,那么是否可以进行开发了呢? 可以,但是为了能够更高效率的开发,我们还需要下载一个软件,该软件的作用就是方便我们能够快速的编写GO指令,快速的运行我们编写好的GO指令. 这个软件就是 GoLand ,就像我们要处理文字安装 Word ,处理表格用 Excel 等等. 我们把这种用来能够用来快速编写某种语言(GO,Python,JAVA,C#)指令,快速运行,同时如果出错可以方便我们查找错误(排错)的软件就称为IDE. IDE是什么 IDE(Integrate

  • linux环境配置nginx导致页面不刷新的解决方法

    在linux环境下,配置了nginx负载均衡,由于可能在虚拟主机的配置文件nginx.conf中,对缓存机制未配置成功,导致页面不刷新,仍然显示缓存中的内容. 最后通过注释nginx.conf文件中的相关缓存配置,然后到tmp目录下查看已生成的缓存文件,如图: 这里我们需要将proxy_cache以及proxy_temp文件删除: 重启nginx服务:sercive nginx restart 页面刷新的问题解决了...

  • Linux下安装nginx的实现方法

    Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本, 安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl-devel 安装这4个依赖的时候,中间会有一些询问,输入Y即可 下载nginx的tar包 //进入/usr/local目录 cd /usr/local //创建一个文件夹nginx mkdir ngi

  • ubuntu下配置nginx+php+mysql详解

    1.更新 www.jb51.net 复制代码 代码如下: sudo apt-get update 2.安装nginx 复制代码 代码如下: sudo apt-get intsall nginx Ubuntu安装之后的文件结构大致为: * 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下  www.jb51.net *程序文件在/usr/sbin/nginx * 日志放在了/var/log/nginx中 *并已经在/etc

  • Linux下查看nginx apache mysql php的编译参数

    快速查看服务器软件的编译参数:1.nginx编译参数: your_nginx_dir/sbin/nginx -v 2.apache编译参数: cat your_apache_dir/build/config.nice 3.php编译参数: your_php_dir/bin/php -i |grep configure 4.mysql编译参数: cat your_mysql_dir/bin/mysqlbug |grep configure 以下是完整的实操例子: 查看获取nginx的编译参数: 复

  • Linux下Tomcat+Nginx服务器环境安装配置的简明教程

    一.安装 1.安装JDK 下载的jdk文件为:jdk-6u45-linux-x64.bin,执行如下命令进行安装: #./jdk-6u12-linux-i586.bin 2.安装tomcat: #tar zxvf apache-tomcat-6.0.18.tar.gz #mv apache-tomcat-6.0.29 tomcat 这里我将解压后的apache-tomcat-6.0.29重命名为了tomcat方便操作. 3.配置环境变量: 编辑/etc下的profile文件,加上如下内容: JA

随机推荐