nginx连接weblogic负载 用nginx做weblogic的前端负载均衡器

时间:2024-04-15 20:28:00

...

http://blog.sina.com.cn/s/blog_5426e0180100dtyz.html

 

之前一直用apache来做weblogic的前端,由于nginx对静态内容的出色性能,不得不转投nginx。这里就不
再写weblogic的安装了。

安装nginx
nginx需要pcre做支持,一般系统都自带,当然可以自己下载高版本的源码包安装,建议大家使用高版本的pcre,
这样使用正则的时候会有更好的支持。
首先去http://wiki.nginx.org//NginxChs下载nginx,我用了0.7

# tar zxvf nginx-0.7.59.tar.gz
# cd nginx-0.7.59
# ./configure --with-http_stub_status_module –prefix=/opt/nginx
# make
# make install

--with-http_stub_status_module 增加nginx的监控模块,用来监控 Nginx 的当前状态。

下面来配置nginx
配置文件,在/opt/nginx/conf下的nginx.conf,为了省事,直接复制我的配置文件过来:
#user  nobody;
worker_processes  10;

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

#pid        logs/nginx.pid;


events {
 use epoll;        //nginx处理连接的方法,epoll - 高效的方法,使用于Linux内核2.6版本及以后的系统。
 worker_connections  51200;
}


http {
    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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  75;

    #gzip  on;


 upstream 99ding {
         server 124.42.*.***:7002 weight=10;
         server 124.42.*.***:7001 weight=10;
    }        //因为我的weblogic没有做集群,所以只能用nginx自带的负载均衡,不过推荐使用weblogic的集群

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

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

         location ~ ^/status/ {
            stub_status on;
            access_log off;
         }       //监控nginx的状态:http://www.test.com/status/


        location / {
            root   /opt/html/app;
            index  index.html index.htm;
            expires 30d;    //expires是设定cookie的存活时间,我用了30天
        }

         location ~ ^/(WEB-INF)/ {
            deny all;
         }


         location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {
             root /opt/html/app;
            expires 24h;
        }


        location ~ (\.jsp)|(\.do) {
            proxy_pass  http://test;
            proxy_set_header    X-Real-IP  $remote_addr;

            proxy_set_header    Host       $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
            proxy_max_temp_file_size 512m;
        }       //最关键的地方,将jsp和do文件转给weblogic处理,这里使用的是上面创建的test(负载均衡的名字),如果不用

负载均衡,可以把test用 “ip:端口号”来代替,例如http://10.0.0.1:7001

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


}


接下来启动服务即可,首先检查配置文件是否有错误:
/opt/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf
启动服务:
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

 

------------------------

http://blog.wadecn.com/?p=214

nginx用做weblogic前端七层负载

  • 准备安装包(nginx和upstream_hash)
https://github.com/evanmiller/nginx_upstream_hash
 
http://nginx.org/download/

 

  • 编译安装
tar -zxvf nginx-0.7.65.tar.gz
unzip cep21-nginx_upstream_hash-99ace64.zip
 
patch -p0 < ../cep21-nginx_upstream_hash-99ace64/nginx.patch
patching file src/http/ngx_http_upstream.h
 
./configure --add-module=../cep21-nginx_upstream_hash-99ace64 --prefix=/ngboss/webproxy1
make && make install

 

  • 配置nginx
#user  webproxy1 webproxy1;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;
 
pid        logs/nginx.pid;
 
events {
    use         epoll;
    worker_connections  51200;
}
 
http {
    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;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  15;
 
    #gzip  on;
 
    userid          on;
    userid_name     QHAINGBOSSID;
    userid_domain   192.168.102.249;
    userid_path     /;
    userid_expires  2d;
 
    upstream ngboss_cluster {
        hash   $cookie_QHAINGBOSSID;
        server 192.168.102.249:8081;
    }
 
    upstream saleserv_cluster {
        hash $cookie_QHAINGBOSSID;
        server 192.168.102.249:8083;
    }
 
    server {
        listen       9090;
        server_name  localhost;
 
        proxy_redirect off;
 
        location /saleserv {
            if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                expires max;
            }
            proxy_pass http://saleserv_cluster;
        }      
 
        location / {
            if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                expires max;
            }
            proxy_pass http://ngboss_cluster;
        }
    }
}

 

  • 起停控制
# 启服务
sbin/nginx
 
# 停服务
sbin/nginx -s stop
 
# 平滑重启
kill -HUP `cat logs/nginx.pid `

 

==============================================

http://xiahongyuan.blog.51cto.com/906214/852635

Nginx代理与负载均衡配置与优化
 Nginx代理
 
 Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。
 
 Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。
 
 在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
 下面的文档说明了nginx如何做代理服务器,将请求转发到其他服务器,本身不做缓存。使用版本为nginx-0.8.15,配置如下:
 
 
 
 http
{
……..
     client_max_body_size           300m          ;                  // 允许客户端请求的最大单个文件字节数
 
         client_body_buffer_size       128k;         
         // 缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
         proxy_connect_timeout          600;
    // 跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_read_timeout               600;
    // 连接成功后_等候后端服务器响应时间_其实已经进入后端排队之中等候处理
proxy_send_timeout              600;
proxy_buffer_size                  16k;            // 会保存用户的头信息,供nginx进行规则处理
 
proxy_buffers                        4  32k;    // 告诉nginx保存单个用的几个buffer最大用多大空间
 
proxy_busy_buffers_size        64k;       
proxy_max_temp_file_size      64k;
// proxy缓存临时文件的大小
 
 
upstream clubsrv {
        server 192.168.0.110:80 weight=5;
        server 192.168.0.121:80 weight=5;
    }
    upstream mysrv {
        server 192.168.0.32:80 weight=2;
        server 127.0.0.1:8000 weight=8;
    }
    server {
        listen       80;
        server_name  club.xywy.com;
        charset gbk;
        root  /www;
        access_log logs/aaa.log combined;
//下面是第一个域名,使用clubsrv的代理
        location / {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
// 如果后端服务器返回502、504或执行超时等错误,自动将请求转发到upstream另一台服务器
            proxy_pass  http://clubsrv;
// 与上面upstream自己命名的名字填写一致
            proxy_redirect     off;
            proxy_set_header   Host            club.xywy.com;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
// nginx在前端做代理,后端的日志会显示127.0.0.1,上面配置可以显示用户真实IP(还需装第三方软件,见下面的详细说明)
            index  index.htm index.html index.php;
        }
//下面是第二个域名,使用mysrv的代理,访问www.sum.com/message目录下的
    server {
        listen       80;
        server_name  www.sum.com;
        location /message {
           proxy_pass  http://mysrv;
           proxy_set_header   Host            $host;
// 访问这个域名的,只有mysrv 本机可以访问
          }
//访问除了/message之外的www.sum.com/ 地址,
        location / {
           proxy_pass  http://mysrv;
           proxy_set_header   Host            $host;
                     proxy_set_header   X-Real-IP       $remote_addr;
 
下面的配置,与上面错误返回的效果相同,这里可以不写。
 
 error_page   500 502 503 504  /50x.html;  
 location = /50x.html
{
   root   html;
}

 
2、Nginx负载均衡指令 
Nginx属于软件的七层负载均衡(lvs是软件的四层负载均衡的代表),七层负载均衡软件还有L7SW(Layer7 switching)、HAProxy等。支持负载均衡的模块是Http Upstream。下面介绍此模块及他下面的几个指令 
HTTP Upstream模块
 1ip_hash指令 
当对后端的多台动态应用服务器做负载均衡时,ip_hash指令将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某ip用户在Sever A上登录后,再访问该站点的其他URL时,能保证访问仍在Server A上。如果不加ip_hash,加入用户在Server A上登录,再访问该站点其他URL,就有可能跳转到后端的Sever B、C…..,而session记录在A上,B、C上没有,就会提示用户未登录。
注意:但这种访问不能保证后端服务器的负载均衡,可能后端有些server接受到的请求多,有些server接受的少,设置的权重值不起作用。
建议如果后端的动态应用程序服务器能做到session共享,而不用nginx上配置ip_hash的方式。 
 
upstream mysrv {
        ip_hash;
        server 192.168.0.110:80 weight=2;
        server 127.0.0.1:8000 down;
        server 192.168.0.212:80 weight=8;
    }
2server指令
该指令用语指定后端服务器的名称和参数。服务器的名称可以是一个域名,一个ip,端口号或UNIX Socket。
参数介绍:
weight=number : 设置服务器权重,权重值越高,被分配到客户端请求数越多。默认为1;
max_fails=numbser : 在fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生错误(404除外),则标记为失败。如果没有设置,默认为1。设置为0则关闭这项检查。
fail_timeout=time : 在经历参数max_fails设置的失败次数后,暂停的时间。
down : 表示服务器为永久离线状态。
Backup : 仅仅在非backup服务器全部down或繁忙的时候才启用。
配置如下:

 

 
upstream mysrv {
        ip_hash;
        server  www.xywy.com  weight=2;
        server  127.0.0.1:8000   down;
        server  192.168.0.212:80  max_fails=3  fail_timeout=30s;
        server  unix:/tmp/bakend3;
    }

 =================================================

 http://sns.linuxpk.com/blog-46744-15630.html

 

打算使用nginx做负载均衡,把请求代理转到一个apache上,apache后面是WebLogic上的应用。apache上有别的插件,必须要过apache。
    down到nginx-0.6.35,安装后,配置很简单。配置后问题如下:走nginx直接到WebLogic上的应用没有问题;但是nginx到apache再到WebLogic上的应用就有问题。
    日志中是302(nginx中"HTTP/1.1 302 2783",apache上是"HTTP/1.0 302 2771")。对比后,开始以为是HTTP/1.1和HTTP/1.0的问题。后来想到 Nginx 和浏览器使用 HTTP/1.1 进行对话,而在后台服务中使用 HTTP/1.0,是对的,然后注意到 2个web服务上得到的 返回给客户端的不包括响应头的字节数 是不一样长的,这个缺的 12 字节缺在哪里还需要追究一下。
    同时想起来访问测试的时候访问 /web 和访问 /web/ 是不一样的,apache上是可以处理掉的,注意到apache处理类似的资源请求时 日志中会先打 302,然后后面自动加 / ,之后日志中就200了。nginx没有处理,不知道是没有设置的缘故还是他本身就不能处理类似的问题。不过后者几率应该不大,还得研究一下nginx配置和apache的相关处理机制。
    再有想到用重写机制来加上对"/"的处理,但是考虑到nginx代理到apache上也会报302,估计这样也解决不了问题,还得研究一下proxy的配置。
    OK,看看以上3条路 那条 是 正解。
 

 ====================================

http://www.cnblogs.com/huangjingzhou/articles/2177198.html

## set uid and gid of process
user webproxy ngboss;
## how many process will be started
worker_processes 10;
## worker_cpu_affinity define
worker_cpu_affinity 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 100000000000;
## how many open files will be allowd of each process
worker_rlimit_nofile 51200;
## error log defind
error_log  logs/error.log crit;
## save master process-id in file
pid        logs/nginx.pid;
events {
    ## powered by epoll, good!
    use epoll;
    worker_connections 51200;
}
http {
    include       mime.types;
    default_type  text/html;
    ## access log format defind
    log_format  main  \'$remote_addr [$time_local] $request $status $body_bytes_sent\';
    ## access log defind
    access_log  logs/access.log  main;
    ## fast send file system call, good!
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay         on;
    client_body_buffer_size     1024k;
    proxy_connect_timeout       600;
    proxy_read_timeout      600;   
    proxy_send_timeout      600;
    proxy_buffer_size       8k;
    proxy_buffers           4 32k;
    proxy_busy_buffers_size     64k;
    proxy_temp_file_write_size  1024k;
     
    ## set connection timeout (by second)
    keepalive_timeout  30;
    ## gzip setting begin.
    gzip            on;
    gzip_min_length     1k;
    gzip_buffers        4 16k;
    gzip_http_version   1.1;
    gzip_comp_level     9;
    gzip_vary       off;
    gzip_types      text/plain text/javascript text/css text/xml application/xml;
    ## gzip setting end.
    output_buffers      4 32k;
    postpone_output     1460;
    client_header_buffer_size       128k;
    large_client_header_buffers     4 256k;
    ## default encoding
        # charset GBK;
    ## app redirect && load-balancer start
    # ngboss cluster
    upstream ngboss_cluster {
        ip_hash;
        server 10.238.15.65:7101;
        server 10.238.15.66:7201;
        server 10.238.15.67:7301;
        server 10.238.15.68:7401;
    }
    # saleserv cluster
    upstream saleserv_cluster {
        ip_hash;
        server 10.238.15.65:8181;
        server 10.238.15.66:8281;
        server 10.238.15.67:8381;
        server 10.238.15.68:8481;
        server 10.238.15.65:8182;
        server 10.238.15.66:8282;
        server 10.238.15.67:8382;
        server 10.238.15.68:8482;
    }
    # acctmanm cluster
    upstream acctmanm_cluster {
        ip_hash;
        server 10.238.15.65:8191;
        server 10.238.15.66:8291;
        server 10.238.15.67:8391;
        server 10.238.15.68:8491;
        server 10.238.15.65:8192;
        server 10.238.15.66:8292;
        server 10.238.15.67:8392;
        server 10.238.15.68:8492;
    }
    # custmanm cluster
    upstream custmanm_cluster {
        ip_hash;
        server 10.238.15.65:8111;
        server 10.238.15.66:8211;
    }
    # groupserv cluster
    upstream groupserv_cluster {
        ip_hash;
        server 10.238.15.65:8183;
        server 10.238.15.66:8283;
    }
    # salemanm cluster
    upstream salemanm_cluster {
        ip_hash;
        server 10.238.15.65:8121;
        server 10.238.15.66:8221;
    }
    # chnlmanm cluster
    upstream chnlmanm_cluster {
        ip_hash;
        server 10.238.15.65:8101;
        server 10.238.15.66:8201;
    }
    # resmanm cluster
    upstream resmanm_cluster {
        ip_hash;
        server 10.238.15.65:8131;
        server 10.238.15.66:8231;
    }
    # prodmcrm prodmbil bilmanm cluster
    upstream prodmanm_cluster {
        server 10.238.15.66:8261;
    }
    # copmanm cluster
    upstream copmanm_cluster {
        server 10.238.15.66:8271;
    }
    # sysmanm cluster
    upstream sysmanm_cluster {
        ip_hash;
        server 10.238.15.65:8141;
        server 10.238.15.66:8241;
    }
    # statmanm cluster
    upstream statmanm_cluster {
        ip_hash;
        server 10.238.15.65:8151;
        server 10.238.15.66:8251;
    }
    ## app redirect && load-balancer end
    server {
        listen       10.238.15.101:18080;
        server_name  10.238.15.101;
        proxy_set_header   X-Forwarded-For  $remote_addr;
                # charset GBK;
        location /download {
            root html;
            proxy_redirect off;
        }
        location /saleserv {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://saleserv_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://saleserv_cluster;
            proxy_redirect  off;
        }
        location /acctmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://acctmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://acctmanm_cluster;
            proxy_redirect  off;
        }
        location /custmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://custmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://custmanm_cluster;
            proxy_redirect  off;
        }
        location /groupserv {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://groupserv_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://groupserv_cluster;
            proxy_redirect  off;
        }
        location /salemanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://salemanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://salemanm_cluster;
            proxy_redirect  off;
        }
        location /chnlmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://chnlmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://chnlmanm_cluster;
            proxy_redirect  off;
        }
        location /resmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://resmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://resmanm_cluster;
            proxy_redirect  off;
        }
        location /prodmcrm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://prodmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://prodmanm_cluster;
            proxy_redirect  off;
        }
        location /prodmbil {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://prodmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://prodmanm_cluster;
            proxy_redirect  off;
        }
        location /bilmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://prodmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://prodmanm_cluster;
            proxy_redirect  off;
        }
        location /copmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://copmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://copmanm_cluster;
            proxy_redirect  off;
        }
        location /sysmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://sysmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://sysmanm_cluster;
            proxy_redirect  off;
        }
        location /statmanm {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://statmanm_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://statmanm_cluster;
            proxy_redirect  off;
        }
        location /nginxstatus {
            stub_status on;
            access_log off;
            allow all;
        }
        location / {
                        if ($request_uri ~* ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$") {
                                proxy_pass http://ngboss_cluster;
                                expires max;
                                break;
                        }
            proxy_pass  http://ngboss_cluster;
            proxy_redirect  off;
        }
         
        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        } <br>

 

 ====================================================

http://www.oschina.net/question/38648_20224

 

user  nobody;
worker_processes 16;
error_log  logs/error.log warn;
pid        logs/nginx.pid;

worker_rlimit_nofile 65000;

events {
  use epoll;
  worker_connections 65000;
  }

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

  server_names_hash_bucket_size 128;
  client_header_buffer_size 	16k;
  large_client_header_buffers 4 64k;

  sendfile 	 		on;
  tcp_nopush     		on;
  tcp_nodelay 	 		on;

  keepalive_timeout 		60;

  gzip 			on;
  gzip_min_length  	1k;
  gzip_buffers     4 	16k;
  gzip_http_version 	1.1;
  gzip_comp_level 	2;

  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  client_max_body_size       16m;
  client_body_buffer_size    256k;
  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;
  proxy_buffer_size          16k;
  proxy_buffers         4    64k;
  proxy_busy_buffers_size    128k;
  proxy_temp_file_write_size 128k;

  proxy_temp_path  proxy_temp_dir;
  proxy_cache_path proxy_cache_dir levels=1:2 keys_zone=cache_one:256m inactive=2d max_size=1g;

  upstream auditsrv {
       server 10.xx.xx.x9:7011;
       server 10.xx.xx.x0:7011;
       server 10.xx.xx.x1:7011;
       server 10.xx.xx.x2:7011;
       ip_hash;
     }

  server {
    listen       80;
    server_name  10.xx.xx.xx;

    log_format  access  \'$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 access;

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
     expires       1d;
     proxy_store   on;
     proxy_store_access user:rw group:rw all:rw;
     proxy_temp_path proxy_temp_dir;

	if ( !-e $request_filename ) {
        	proxy_pass  http://auditsrv;
     	}
    }

    location ~ .*\.(js|css)?$ {
     expires       2h;
     proxy_store   on;
     proxy_store_access user:rw group:rw all:rw;
     proxy_temp_path proxy_temp_dir;

	if ( !-e $request_filename ) {
        	proxy_pass  http://auditsrv;
     	}
    }

    location / {
      proxy_pass      	         http://auditsrv;
      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_cache_key 		 $host$uri$is_args$args;
      proxy_cache 		 cache_one;
      expires	  		 1d;
    }

    location /nginxstatus {
      stub_status             on;
      access_log              on;
      allow 10.xx.xx.xx;
      deny all;
    }
  }
}

我的后台是四个节点的weblogic服务,前端是使用Nginx做的反向代理,配置已贴出,现在的问题是界面点击注销后,会出现IE挂掉,从界面反映看得出IE在做死循环,似乎刷新频率很高,CPU能涨到80%-90%,注销使用的链接是xxxxx/logout.cmd?method=logout,不知道是出了什么问题。

 

 

问题解决了,似乎是因为我对动态页面也设置了缓存才导致的,后来我把

location / { ... }

中的以下三行注释掉后就没有出现注销失败的问题了

      proxy_cache_key 		 $host$uri$is_args$args;
      proxy_cache 		 cache_one;
      expires	  		 1d;


看来动态页面也做缓存的话问题还真多啊

 

 

 

--------------------------

=================================

http://www.graynight.org/?p=1083

 

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

一种是通过硬件来进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。

 

近期朋友刘鑫(紫雨荷雪)的项目成功上线了,PV达到了亿级/日的访问量,最前端用的是HAProxy+Keepalived双机作的负载均衡器/反向代理,整个网站非常稳定;这让我更坚定了以前跟老男孩前辈聊的关于网站架构比较合理设计的架构方案:即Nginx/HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。

 

在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了。相信大家对这些软件级别的负载均衡软件都已经有了很深的的认识,下面我就它们的特点和适用场合分别说明下。

 

LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。

LVS的特点是:

1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;

2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;

3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;

4、无流量,保证了均衡器IO的性能不会收到大流量的影响;

5、应用范围比较广,可以对所有应用做负载均衡;

6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。

7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

 

Nginx的特点是:

1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;

2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;

3、Nginx安装和配置比较简单,测试起来比较方便;

4、也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;

5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;

6、Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;

7、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。

8、Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。

 

HAProxy的特点是:

1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

3、支持url检测后端的服务器出问题的检测会有很好的帮助。

4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。

5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。

6、HAProxy的算法现在也越来越多了,具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

②static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;

⑤ri,表示根据请求的URI;

⑥rl_param,表示根据请求的URl参数\'balance url_param\' requires an URL parameter name;

⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求

 

 

 

 

=======================

 

http://wb1019.blog.163.com/blog/static/128145892011417102339833/

 

Weblogc8.16集群部署+nginx负载均衡  

2011-05-17 22:23:39|  分类: 默认分类|字号 订阅

 
 
Weblogc8.16集群部署+nginx负载均衡

1、  上传weblogic安装文件和nginx的源代码包(略)

2、  安装weblogic8.16并破解

#groupadd bea

#useradd -d /bea -g bea weblogic

#passwd weblogic

#chmod +x server816_linux32.bin

#su – weblogic

$./server816_linux32.bin

(1)    回车

(2)    选择11 - Yes, I agree with the terms of the license

(3)    选择11|Create a new BEA Home

(4)    输入/bea"BEA Home" = [/bea]  (根据实际情况选择)

(5)    选择11|Yes, Use this BEA home directory [/bea]

(6)    选择1->1|Complete

|Install the complete BEA WebLogic Platform.

(7)    回车,"Product Installation Directory" = [/bea/weblogic81]

(8)    选择11|Yes, use this product directory [/bea/weblogic81]

$cp /opt/weblogic7_8_full_license/license.bea /bea/

$cp /opt/weblogic7_8_full_license/weblogic_sp.jar /bea/weblogic81/server/lib/

$chmod +x /bea/weblogic81/server/lib/weblogic_sp.jar

3、  部署weblogic8.16的集群

$cd /bea/weblogic81/common/bin/

$./config.sh

(1)    选择1->1|Create a new WebLogic configuration

(2)    选择44|Basic WebLogic Server Domain 8.1.6.0

(3)    选择22|No

(4)    配置管理平台信息

|       Name       |        Value        |

|__________________|_____________________|

1|      *Name:      |     AdminServer     |

2| Listen address:  | All Local Addresses |

3|   Listen port:   |        6666         |

4| SSL listen port: |         N/A         |

5|   SSL enabled:   |        false        |

(5)    选择11|Yes

|  Name*  |   Listen address    | Listen port | SSL listen port | SSL enabled |

|_________|_____________________|_____________|_________________|_____________|

1| lishi01 | All Local Addresses |    8001     |       N/A       |    false    |

2| lishi02 | All Local Addresses |    8002     |       N/A       |    false    |

(6)    一路回车,直道出现以下界面

    |          Name           |              Value              |

   _|_________________________|_________________________________|

   1|       *User name:       |            weblogic             |

   2|     *User password:     |                                 |

   3| *Confirm user password: |                                 |

   4|      Description:       | The default administration user |

(7)    并且更改为以下

    |          Name           |              Value              |

   _|_________________________|_________________________________|

   1|       *User name:       |            weblogic             |

   2|     *User password:     |            ********             |

   3| *Confirm user password: |            ********             |

   4|      Description:       | The default administration user |

(8)    模式的选择,这里我是测试,选择的是开发模式,根据需要自行选择

 ->1|Development Mode

 

   2|Production Mode

(9)    Jdk的选择,这里也是根据工程的开发使用得jdk来选择,这里我选择的sunjdk

1|JRockit SDK 1.4.2_10-8160 @ /bea/jrockit81sp6_142_10

2|Sun SDK 1.4.2_11 @ /bea/jdk142_11

3|Other Java SDK

(10)域名的安装位置,默认就好"Target Location" = [/bea/user_projects/domains]

(11)输入你的域名

(12)回车开始安装

4、  配置集群

$cd /bea/user_projects/domains/lishi/

$vi StartAdmin.sh

nohup ./startWebLogic.sh > console.log &

$vi Start_All_Server.sh

nohup ./startManagedWebLogic.sh lishi01 http://ip:port > lishi01.log &

nohup ./startManagedWebLogic.sh lishi02 http://ip:port > lishi02.log &

$chmod +x StartAdmin.sh

$./StartAdmin.sh

等待管理服务器启动后

$chmod +x Start_All_Server.sh

$./Start_All_Server.sh

通过http://ip:port/console

(1)    单击Cluster

(2)    Configure a new Cluster...

(3)    输入cluster name,点击create

(4)    配置组播ip以及端口

Weblogc8.16集群部署+nginx负载均衡 - 怒剑 - 生命的轨迹........

 

(5)    添加服务器到Cluster

Weblogc8.16集群部署+nginx负载均衡 - 怒剑 - 生命的轨迹........

 

(6)    依次点击MachinesConfigure a new Machine

(7)    创建Machine

Weblogc8.16集群部署+nginx负载均衡 - 怒剑 - 生命的轨迹........

 

(8)    配置ip以及端口

Weblogc8.16集群部署+nginx负载均衡 - 怒剑 - 生命的轨迹........

 

(9)    添加服务器到Machine

Weblogc8.16集群部署+nginx负载均衡 - 怒剑 - 生命的轨迹........

 

5、  nginx的负载均衡

#tar xzvf nginx-0.7.66.tar.gz

#cd nginx-0.7.66

#./configure --prefix=/opt/nginx --with-http_stub_status_module

#make

#make install

#vi /opt/nginx/conf/nginx.conf

user  nobody nobody;

worker_processes  8;

 

error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

pid        logs/nginx.pid;

 

 

events {

    use epoll;

    worker_connections  51200;

}

 

 

http {

    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;

 

    sendfile        on;

    tcp_nopush     on;

 

    #keepalive_timeout  0;

    keepalive_timeout  65;

 

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;

    upstream  lishi

    server 156.16.34.44:8001;

    server 156.16.34.44:8002;

}

 

    server {

        listen       80;

        server_name  156.16.34.44;

 

        #charset koi8-r;

 

        #access_log  logs/host.access.log  main;

 

        #location / {

        #    root   html;

        #    index  index.html index.htm;

        #}

 

        #error_page  404              /404.html;

 

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

 

        location / { 

        proxy_redirect off;

        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_pass  http://lishi;

}

 

        location /nginxstatus {

        stub_status on;

        access_log on;

        auth_basic "NginxStatus";}

        #auth_basic_user_file conf/htpassword;

}

 

 

======================================

 

 

Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 对资源消耗小, 无论是静态服务器还是小网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高.

 

我在《Apache 虚拟主机 VirtualHost 配置》介绍了在不同操作系统上使用 Apahce 虚拟主机的方法, 还有那么些朋友想知道 Nginx 虚拟主机配置方法, 本文作为补充也介绍如何 Nginx 上添加虚拟主机.

 

 

 

Nginx 虚拟主机配置

 

绝大多数的 Nginx 运行在 Linux 机器上, 虽然有 Windows 移植版, 但我也没搭建过. 所以本文将以 Linux 为例讲解, 而 Mac OS 或其他 Unix like 机器上的操作应该是一样的.

 

增加 Nginx 虚拟主机

 

这里假设大家的 Nginx 服务器已经安装好, 不懂的请阅读各 Linux 发行版的官方文档或者 LNMP 的安装说明. 配置 Virtual host 步骤如下:

 

1. 进入 /usr/local/nginx/conf/vhost 目录, 创建虚拟主机配置文件 demo.neoease.com.conf ({域名}.conf).

 

2. 打开配置文件, 添加服务如下:

 

server {
	listen       80;
	server_name demo.neoease.com;
	index index.html index.htm index.php;
	root  /var/www/demo_neoease_com;
 
	log_format demo.neoease.com \'$remote_addr - $remote_user [$time_local] $request\'
	\'$status $body_bytes_sent $http_referer \'
	\'$http_user_agent $http_x_forwarded_for\';
	access_log  /var/log/demo.neoease.com.log demo.neoease.com;
}

 

3. 打开 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf, 在 http 范围引入虚拟主机配置文件如下:

 

include vhost/*.conf;

 

4. 重启 Nginx 服务, 执行以下语句.

 

service nginx restart

 

让 Nginx 虚拟主机支持 PHP

 

在前面第 2 步的虚拟主机服务对应的目录加入对 PHP 的支持, 这里使用的是 FastCGI, 修改如下.

 

server {
	listen       80;
	server_name demo.neoease.com;
	index index.html index.htm index.php;
	root  /var/www/demo_neoease_com;
 
	location ~ .*\.(php|php5)?$ {
		fastcgi_pass unix:/tmp/php-cgi.sock;
		fastcgi_index index.php;
		include fcgi.conf;
	}
 
	log_format demo.neoease.com \'$remote_addr - $remote_user [$time_local] $request\'
	\'$status $body_bytes_sent $http_referer \'
	\'$http_user_agent $http_x_forwarded_for\';
	access_log  /var/log/demo.neoease.com.log demo.neoease.com;
}

 

图片防盗链

 

图片作为重要的耗流量大的静态资源, 可能网站主并不希望其他网站直接引用, Nginx 可以通过 referer 来防止外站盗链图片.

 

server {
	listen       80;
	server_name demo.neoease.com;
	index index.html index.htm index.php;
	root  /var/www/demo_neoease_com;
 
	# 这里为图片添加为期 1 年的过期时间, 并且禁止 Google, 百度和本站之外的网站引用图片
	location ~ .*\.(ico|jpg|jpeg|png|gif)$ {
		expires 1y;
		valid_referers none blocked demo.neoease.com *.google.com *.baidu.com;
		if ($invalid_referer) {
			return 404;
		}
	}
 
	log_format demo.neoease.com \'$remote_addr - $remote_user [$time_local] $request\'
	\'$status $body_bytes_sent $http_referer \'
	\'$http_user_agent $http_x_forwarded_for\';
	access_log  /var/log/demo.neoease.com.log demo.neoease.com;
}

 

WordPress 伪静态配置

 

如果将 WordPress 的链接结构设定为 /%postname%//%postname%.html 等格式时, 需要 rewrite URL, WordPress 提供 Apache 的 .htaccess 修改建议, 但没告知 Nginx 该如何修改. 我们可以将 WordPress 的虚拟主机配置修改如下:

 

server {
	listen       80;
	server_name demo.neoease.com;
	index index.html index.htm index.php;
	root  /var/www/demo_neoease_com;
 
	location / {
		if (-f $request_filename/index.html){
			rewrite (.*) $1/index.html break;
		}
		if (-f $request_filename/index.php){
			rewrite (.*) $1/index.php;
		}
		if (!-f $request_filename){
			rewrite (.*) /index.php;
		}
	}
	rewrite /wp-admin$ $scheme://$host$uri/ permanent;
 
	location ~ .*\.(php|php5)?$ {
		fastcgi_pass unix:/tmp/php-cgi.sock;
		fastcgi_index index.php;
		include fcgi.conf;
	}
 
	log_format demo.neoease.com \'$remote_addr - $remote_user [$time_local] $request\'
	\'$status $body_bytes_sent $http_referer \'
	\'$http_user_agent $http_x_forwarded_for\';
	access_log  /var/log/demo.neoease.com.log demo.neoease.com;
}

 

LNMP 套件在提供了 WordPress 为静态配置文件 /usr/local/nginx/conf/wordpress.conf, 在虚拟主机配置的 server 范围引用如下即可.

 

include wordpress.conf;

 

如果你使用 LNMP 套件, 进入 WordPress 后台发现会出现 404 页面, wp-admin 后面缺少了斜杆 /, 请在 wordpress.conf 最后添加以下语句:

 

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

 

后话

 

一直以来, 我主要在用 Apache, 自从去年从 MT 搬家到 Linode VPS 之后, 发现服务器压力很大, 每隔几天就要宕机一次, 在胡戈戈的协助下转成了 Nginx, 大半年了一直很稳定.

 

相对 Apache, Nignx 有更加强大的并发能力, 而因为他对进程管理耗用资源也比较少. 而 Apache 比 Nginx 有更多更成熟的可用模块, bug 也比较少. 卖主机的 IDC 选择 Nignx, 因为高并发允许他们创建更多虚拟主机空间更来钱; 淘宝也因此改造 Nignx (Tengine) 作为 CDN 服务器, 可承受更大压力.