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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本部署架构设计的目的是使用Nginx处理用户向服务器发起静态页面的请求如html、图片、css样式表及js等,使用tomcat处理用户向服务器发起的动态请求项从而提高我们服务器的交付能力和深度挖掘服务器的性能。

本部署架构设计的目的是使用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.访问http://192.168.202.73:8080/测试是否可以访问tomcat的管理界面

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

a)cd  /home/www/tocmat6/conf

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

#Host的配置项内进行配置

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

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 http://localhost:8080; #动态请求转向处理

        }

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

        #}

        # 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运行状态的用法介绍

   #该设置的用法为

通过访问http://192.168.202.73/status的反回信息如下

      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.http://ishare.iask.sina.com.cn/f/2最好3907758.html下载压力测试软件webbench-1.5.tar.gz

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

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

4.进行压力测试webbench -c 1000 -t 30 http://127.0.0.1/

5.通过http://192.168.202.73/status进行查看链接并发量

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

目录
相关文章
|
2月前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
222 69
|
6天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
23 2
|
15天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
16天前
|
运维 JavaScript 虚拟化
探索容器化技术:Docker的实践与应用
【10月更文挑战第9天】探索容器化技术:Docker的实践与应用
43 3
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
2月前
|
容器 云栖大会
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
12天前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
30 0
|
2月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
58 4

热门文章

最新文章