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命令查看主机资源使用情况

目录
相关文章
|
4月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
169 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
6月前
|
存储 安全 应用服务中间件
将下载的Nginx证书转换为Tomcat证书格式
好,可以看到,将Nginx证书转换为Tomcat证书的过程就像在烘焙一块蛋糕。你需要准备材料(证书),配备工具(OpenSSL, keytool),按照一定的步骤慎重制作,最后你就拥有了一块可以在浏览器中呈现出漂亮的安全状态的HTTPS蛋糕。就这么简单,明了,没有任何复杂的理论知识,就像在家庭厨房里烘焙的快乐一样。
320 16
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
211 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
198 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
268 11
|
8月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
365 16
|
9月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
9月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
11月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。