Struts框架下Nginx与Tomcat容器的深度整合实践

6500阅读 1评论2012-08-26 fengzhanhai
分类:LINUX

本部署架构设计的目的是使用Nginx处理用户向服务器发起静态页面的请求如html、图片、css样式表及js等,使用tomcat处理用户向服务器发起的动态请求项从而提高我们服务器的交付能力和深度挖掘服务器的性能。

一、安装软件准备

1.程序运行环境软件 jdk-6u31-linux-i586.bin

2.web容器apache-tomcat-6.0.35

3. 正则表达式pcre-7.9.tar.gz

4. nginx-1.3.3.tar.gz

5. 压测webbench-1.5.tar.gz (该软件也可以不安装只是一款压力测试软件)

二、用户管理

1.添加www用户组 groupadd www

2.添加www用户 useradd www –g www

三、安装介质

1.tomcat免安装软件 所以cpwww用户下后使用tar  -xvf tomcat.tar 即可

2.安装jdk程序包

首先赋予其执行权限 chmod u+x jdk-6u31-linux-i586.bin后进行安装 ./ jdk-6u31-linux-i586.bin

3.设置运行环境变量

etc目录内追加以下内容到profile文件

JAVA_HOME=/usr/local/jdk1.6.0_31

export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH

export PATH

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export CLASSPATH

4.重新加载source profile后运行java命令测试是否正确进行配置。如果返回了java相关信息则证明配置已经生效

5.进入tomcat的启动目录cd  /home/www/tocmat6/bin

6.启动tomcat 服务sh startup.sh

7.访问测试是否可以访问tomcat的管理界面

8.优化跳转页面,该设置可以使你的域名直接跳转至你的业务层

a)cd  /home/www/tocmat6/conf

b)修改server.xml文件的信息如下所示

#Host的配置项内进行配置

9.重启tomcat访问验证是否跳转至你的业务系统首界面

10.部署Nginx软件

tar –zxvf  nginx-1.3.3.tar.gz

cd nginx-1.3.3

./configure --with-http_stub_status_module --with-http_ssl_module

提示缺少PCRE library

解决方法安装pcre-7.9.tar.gz程序

tar –zxvf pcre-7.9.tar.gz

cd pcre-7.9

./configure

make && make install(root用户下部署)

11.重新编译并安装nginx软件

./configure --with-http_stub_status_module --with-http_ssl_module

make && make install

12.配置nginx服务

()、首先touch一个反向代理文件proxy.conf并追加以下内容到配置文件内

#add by fengzhanhai

# proxy.conf

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;

#以下参数可以根据自己业务的实际需求进行微调

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_connect_timeout 90;

proxy_send_timeout 90;

proxy_read_timeout 90;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

()、修改nginx.conf主配置文件

user www www; #运行该服务的用户及用户组 各位同学记得1024端口下的服务要在root下启动哦

#user  nobody;

worker_processes  8; #根据你的服务器硬件性能设置

error_log  /home/www/nginx/logs/error.log; #错误日志的存放位置 很重要哦

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

pid        /home/www/nginx/logs/nginx.pid; #服务器每次启动的id都会写到该文件哦

worker_rlimit_nofile 65535; #并发连接数上限

events {

    use epoll;             #开启epoll模式

    worker_connections  65535;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    include /home/www/nginx/conf/proxy.conf;

    #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;

    #设定请求缓存

    server_names_hash_bucket_size 128;

    client_header_buffer_size 32k;

    large_client_header_buffers 8 32k;

   # client_max_body_size 8m;

    sendfile        on;

    tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

    tcp_nodelay on;

    #gzip  on;

    server {

        listen       80;

        server_name  localhost;

        charset utf-8;

        index index.html index.htm index.jsp login.jsp; #设定访问的默认首页地址

        #access_log  logs/host.access.log  main;

        root /home/www/tomcat6/webapps/MMS;   #设定静态数据访问的位置

        location ~.*\.(jsp|do)$                       #设置动态数据的请求url

        {

        index index.jsp;

        proxy_pass #动态请求转向处理

        }

        location ~.*\.(gif|jpg|jpeg|png|bmp|swf|html)$ #静态数据保存时效

        {

          expires 30d;

        }

        location ~.*\.(js|css)?$   #jscss保存时效

        {

         expires 1h;

        }

      location ~(favicon.ico) 

        {

         log_not_found off;

         expires 30d;

         break;

        }

      location /status  #统计Nginx运行状态

      {

        stub_status on;

        access_log /home/www/nginx/logs/status.log;

        auth_basic "NginxStatus";

       }

     

      # 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 /home/www/nginx/logs/localhost.log access; #设定访问日志存放路径

       # 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;

        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass  

        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;

        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

        #    include        fastcgi_params;

        #}

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

    }

    # another virtual host using mix of IP-, name-, and port-based configuration

    #

    #server {

    #    listen       8000;

    #    listen       somename:8080;

    #    server_name  somename  alias  another.alias;

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

    # HTTPS server

    #

    #server {

    #    listen       443;

    #    server_name  localhost;

    #    ssl                  on;

    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers   on;

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

}

13. stub_status统计Nginx运行状态的用法介绍

   #该设置的用法为

通过访问的反回信息如下

      Active connections: 1

server accepts handled requests

      22 22 83

Reading: 0 Writing: 1 Waiting: 0

     active connections对后端发起的活动连接数

server accepts handled requests — nginx 总共处理了 22 个连接, 成功创建 22 次握手 (证明中间没有失败的), 总共处理了83 个请求 (平均每次握手处理了 4个数据请求)

reading读取到客户端的Header信息数

writing返回给客户端的Header信息数

waiting已经处理完正在等候下一次请求指令的驻留连接

14.出现如下错误在使用nginx代理访问原有服务时图片无法正常显示后台如下错误

2012/08/22 11:29:27 [error] 14389#0: *2 "/home/www/tomcat/webapps/sdmtv/index.html" is forbidden (13: Permission denied)

2012/08/2211:29:27[error]14389#0: *2 open() "/home/www/tomcat/webapps/sdmtv/favicon.ico" failed (13: Permission denied)

解决方法如下将你的tomcat目录权限设置 为chmod u+7 tomcat6

四、后续完善之压力测试篇(需要的朋友可以从其他服务器或者你的pc上部署一款功能类似的软件进行测试也可以)

1.

2.解压下载后的压缩包 tar –zxvf webbench-1.5.tar.gz

3.编译和安装压力测试程序webbench make && make install

4.进行压力测试webbench -c 1000 -t 30

5.通过进行查看链接并发量

6.通过topfree命令查看主机资源使用情况

上一篇:使用飞信监控服务器是否在线或宕机及相应服务端口状态监控的shell
下一篇:IP网络故障的基本排除方法和原则