用nginx+passenger来做负载均衡

由于3.x系列已不再支持mongrel,所以就采用nginx+passenger来做负载均衡;之前有发过nginx+mongrel,puppet version是2.7系列的,所以还是可以用的;

环境说明:

操作系统:centos 5.8 64位

puppet版本:3.1系列

1,升级ruby至1.8.7,安装rubygems
# rpm -Uvh http://rbel.frameos.org/rbel5
# yum install -y ruby rubygems ruby-devel.x86_64    

2,安装puppet server
# rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-1.noarch.rpm
# yum install -y puppet puppet-server    

3,安装nginx相关的依赖包
# yum install -y gcc make pcre-devel zlib-devel openssl-devel pam-devel curl-devel rpm-build    

4安装rake, rack and passenger ruby gems
# gem install rake rack passenger --no-rdoc --no-ri    

5,安装nginx
编译参数如下,必须包含passenger模块
# tar -xjf pcre-8.32.tar.bz2 -C /usr/local/src   ----pcre自己下载
# tar -xzf nginx-1.2.1.tar.gz -C /usr/local/src  ----解压nginx
cd /usr/local/src/nginx-1.2.1
    ./configure --prefix=$NGINX_PATH --with-   http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.32 --add-module=`passenger-config --root`/ext/nginx
# make
# make install    

6,与passenger的结合
# mkdir -p /etc/puppet/rack/public
# cp /usr/share/puppet/ext/rack/files/config.ru /etc/puppet/rack/
# chown -R puppet:puppet /etc/puppet/rack/
# nginx.conf里面具体的内容如下    

user www www;    

worker_processes  1;    

error_log  /usr/local/nginx/logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;    

pid        /usr/local/nginx/nginx.pid;    

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;    

events {
    use epoll;
    worker_connections  65535;
}    

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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';    

    #access_log  logs/access.log  main;    

    charset utf-8;    

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 64k;
    client_max_body_size 8m;    

    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout 60;
    fastcgi_intercept_errors on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;    

    open_file_cache max=65535 inactive=10s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;    

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;    

    # Passenger needed for puppet
    passenger_root  /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19;
    passenger_ruby  /usr/bin/ruby;
    passenger_max_pool_size 15;
    index index.html index.htm index.php;    

    server {
        listen       80;
        server_name  localhost;    

        #access_log  logs/host.access.log  main;    

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

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    

        location ~ \.php$ {
            root           html;
            #fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass unix:/dev/shm/php.socket;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }    

    }    

    server {
      listen                     8140 ssl;
      server_name                client.domain.com;    

      passenger_enabled          on;
      passenger_set_cgi_param    HTTP_X_CLIENT_DN $ssl_client_s_dn;
      passenger_set_cgi_param    HTTP_X_CLIENT_VERIFY $ssl_client_verify;     

      access_log                 /usr/local/nginx/logs/puppet_access.log;
      error_log                  /usr/local/nginx/logs/puppet_error.log;    

      root                       /etc/puppet/rack/public;    

      ssl_certificate            /var/lib/puppet/ssl/certs/client.domain.com.pem;
      ssl_certificate_key        /var/lib/puppet/ssl/private_keys/client.domain.com.pem;
      ssl_crl                    /var/lib/puppet/ssl/ca/ca_crl.pem;
      ssl_client_certificate     /var/lib/puppet/ssl/ca/ca_crt.pem;
      ssl_ciphers                SSLv2:-LOW:-EXPORT:RC4+RSA;
      ssl_prefer_server_ciphers  on;
      ssl_verify_client          optional;
      ssl_verify_depth           1;
      ssl_session_cache          shared:SSL:128m;
      ssl_session_timeout        5m;
    }    

}
注意下,我这里puppet server的hostname 是client.domain.com,至于具体的key路径之类的 大家自己按各自的环境自己改
然后调整下puppet.conf
[main]    

[agent]
  server = client.domain.com   

[master]
  certname = client.domain.com   

7,验证
启动nginx
# lsof -i:8140
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   20855 root    9u  IPv4 421091      0t0  TCP *:8140 (LISTEN)
nginx   20856  www    9u  IPv4 421091      0t0  TCP *:8140 (LISTEN)
可以发现8140端口已经起来
# puppet agent --test --server client.domain.com
Info: Retrieving plugin
Info: Caching catalog for client.domain.com
Info: Applying configuration version '1366960369'
Notice: Finished catalog run in 0.16 seconds
发现已能正常使用
# tail /usr/local/nginx/log/puppet_access.log  查看nginx日志
192.168.200.220 - - [26/Apr/2013:21:12:15 +0800] "GET /production/node/client.domain.com? HTTP/1.1" 200 3502 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:16 +0800] "GET /production/file_metadatas/plugins?&links=manage&recurse=true&checksum_type=md5&ignore=---+%0A++-+%22.svn%22%0A++-+CVS%0A++-+%22.git%22 HTTP/1.1" 200 283 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:17 +0800] "POST /production/catalog/client.domain.com HTTP/1.1" 200 1033 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:17 +0800] "PUT /production/report/client.domain.com HTTP/1.1" 200 14 "-" "-"
已经有记录,    

8.调整
如果puppetmaster服务已经做成开机启动,记得关掉
# chkconfig puppetmaster off
# chkconfig nginx on

至此Puppet 负载均衡到此结束,nginx分别与passenger,mongrel的结合都做完了

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nginx
, puppet
, client
, index
, local
, domain
gzip_http_version
nginx负载均衡配置、nginx 负载均衡、nginx tomcat负载均衡、nginx tcp 负载均衡、nginx负载均衡策略,以便于您获取更多的相关知识。

时间: 2024-09-28 18:23:27

用nginx+passenger来做负载均衡的相关文章

nginx基于tcp做负载均衡的方法_nginx

配置多台服务器时,经常需要让各个服务器之间的时间保持同步,如果服务器有外网环境,可以直接同外部的时间服务器更新时间,可以采用rdate命令更新时间: rdate -s tick.greyware.com 可以写个脚本放在/etc/cron.hourly中每小时校正一下时间. 如果是内网环境下,可以自己配置一个时间服务器,以CentOS为例,配置时间服务器的方法如下: 1.先安装xinetd : sudo yum install -y xinetd 2.修改/etc/xinetd.d/time-

Nginx服务器做负载均衡反向代理的超级攻略_nginx

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字.在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数. 例如: upstream backend { server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10; server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;; } 默认请求下,

Windows 下使用nginx对SqlServer进行负载均衡

windows 下使用nginx对SqlServer进行负载均衡 1.自从nginx版本1.9之后,nginx 便增加了对tcp与udp协议的支持 官方文档 The ngx_stream_core_module module is available since version 1.9.0. This module is not built by default, it should be enabled with the –with-stream configuration parameter

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

同一台服务器安装两个tomcat做负载均衡请求响应不一致

问题描述 同一台服务器安装两个tomcat做负载均衡请求响应不一致 同一台服务器安装两个tomcat,做tomcat的负载均衡请求和响应的端口不一样,导致登陆时报404错误. 比如,两个tomcat 8081.8082端口,登陆时请求的是8081端口,验证用户信息,但是响应的是8082端口号,导致404错误. 解决方案 这需要做一些负载均衡的规则,保证同一个session是在一个服务器上处理. 解决方案二: 需要做session共享,tomcat最常见的就是使用memcache存储session

Nginx + Shiro + Ehcache 实现负载均衡集群(成绩报告查询系统)

项目介绍 最近在做一款产品,对外提供学生成绩报告的查询,支付,查看以及下载等一系列功能,这里就简称成绩报告查询系统吧. 初步参赛人数十万左右,可能会存在相对高的并发同时在线,所以开发阶段就对负载均衡集群做了设计. 当然,涉及到负载均衡集群,就要考虑的Session存储的问题,由于项目本身使用了Ehcache做本地缓存,Shiro对其做了很好的封装,并且Ehcache也是支付分布式缓存同步的.所以,采用Ehcache做session存储暂且是一种实施方案. 关于Ehcache分布式缓存见:http

详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南_nginx

Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

在不同端口下模拟 Nginx 反向代理和负载均衡

Nginx 是一个轻量级的 WEB 服务器,反向代理服务器和电子邮件服务器,本文介绍在虚拟机中使用不同的端口来模拟不同的服务器,并使用 Nginx 反向代理功能实现服务器负载均衡的效果. 新建两个站点 首先新建两个 WEB 目录当做不同的服务器下的站点,一个是 website-A,一个是 website-B. 这两个站点目录应该是在不同的服务器上,而且代码是一模一样的,这里为了方便在一台虚拟机上模拟不同服务器,并且把两个站点目录下的首页做了一点修改,以区分访问到的是不同目录(服务器)下的站点.两

Apache做负载均衡配置教程(windows/linux)

windows下Apache做负载均衡 第一次看到这个标题时我也很惊讶,Apache居然还能做负载均衡?真是太强大了.经过一番调查后发现的确可以,而且功能一点都不差.这都归功于 mod_proxy 这个模块.不愧是强大的Apache啊. 废话少说,下面就来解释一下负载均衡的设置方法. 一般来说,负载均衡就是将客户端的请求分流给后端的各个真实服务器,达到负载均衡的目的.还有一种方式是用两台服务器,一台作为主服务器(Master),另一台作为热备份(Hot Standby),请求全部分给主服务器,在