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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本部署架构设计的目的是使用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命令查看主机资源使用情况

目录
相关文章
|
30天前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
27 3
|
1月前
|
IDE 开发工具 Windows
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RowSplit容器组件
51 0
|
1月前
|
安全 Java 应用服务中间件
打破Tomcat中的双亲委派机制:探讨与实践
打破Tomcat中的双亲委派机制:探讨与实践
|
2月前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
37 1
|
1月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
8天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
10天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。
|
25天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
随着企业数字化转型的不断深入,传统的IT运维模式已经难以满足快速迭代和持续交付的需求。本文将探讨如何通过结合DevOps文化与容器化技术,构建一个既高效又稳定的云基础设施。文章首先概述了DevOps的核心理念及其在现代运维中的重要性,然后详细介绍了容器化技术,特别是Docker和Kubernetes在实现微服务架构中的应用。最后,文中通过案例分析展示了这一融合实践如何在真实环境中提升运维效率和系统稳定性。
21 7
|
28天前
|
运维 Kubernetes 监控
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在当今云计算时代,企业追求敏捷性、可扩展性以及成本效益的云基础设施。本文将探讨如何通过DevOps文化与容器化技术的融合,打造一个既高效又稳定的运维环境。文章不仅阐述了DevOps和容器化技术各自的优势,还提供了一个具体的实施案例,展示了这种结合如何优化资源利用、提高部署速度并降低运维复杂性。
|
1月前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。