Linux深入篇之四:配置Nginx+Tomcat动静分离架构
Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是:动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat、Resin处理动态页面。
动静分离从目前实现角度来讲大致分为两种:
一种方法是:纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另一种方法:就是动态跟静态文件混合在一起发布,通过nginx来分开。
通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。
此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一 个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
安装tomcat之前需要安装jdk (Java Development Kit) 是 Java 语言的软件开发工具包(SDK))。
一:安装JDK
1、解压jdk文件并移动到指定的目录:
2、配置java环境变量,在vim /etc/profile 文件(开机检查文件)添加如下语句:
export JAVA_HOME=/usr/java/jdk1.7.0_25/
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
3、使环境变量立刻生效:source /etc/profile
查看java版本:java -version
显示版本为1.7.0_25,证明安装成功!
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,Tomcat本身也是一个HTTP服务器,可以单独使用,apache是一个以C语言编写的HTTP服务器。Tomcat主要用来解析JSP语言。目前最新版本为8.0。
二、配置tomcat
1、下载并解压到指定的目录:tar xzf apache-tomcat-7.0.63.tar.gz
2、重命名文件名:mv apache-tomcat-7.0.63 tomcat
3、并将该文件移动到:mv /soft/tomcat /usr/local/
4、启动tomcat,命令为:/usr/local/tomcat/bin/startup.sh
查看ps -ef |grep tomcat 进程及端口是否存在:
5、通过页面访问可以看到tomcat默认测试页面:
6、tomcat常用目录
tomcat默认的发布目录:/usr/local/tomcat/webapps/ROOT/
主配置文件:/usr/local/tomcat/conf/server.xml
tomcat默认http端口:8080
三、测试单台tomcat的访问页面
1、移除默认发布目录的所有内容到另一个目录中,
2、自定义一个发布目录的jsp测试页面:
<html>
<body>
<h1> tomcat_1 JSP page</h1>
<%=new java.util.Date()
%>
%</body>
%</html>
3、打开这个测试页面:
这个画面是默认网站,怎么来创建一个自己的网站页面呢,定义自己的发布目录,方法如下:在server.xml配置文件末尾加入如下行:
<Context path="/login" docBase="/data/webapps/html" reloadable="true" crossContext="true" unpackWAR="true"/>
在/data/webapps/www目录下,创建自己的jsp代码,重启tomcat即可访问。
四、tomcat默认端口
tomcat默认端口有3个:
http:8080
shutdown:8005
AJP:8009
2、分别编辑以下配置文件,并修改默认的端口
vi /usr/local/tomcat1/conf/server.xml
vi /usr/local/tomcat2/conf/server.xml
3、分别启动3个tomat,
4、查看端口
五、配置Nginx-tomcat动静分离架构
在2台tomcat上配置发布目录,用于测试多个tomcat效果
1、查看两台tomcat的本地测试页面:
2、配置nginx来负载均衡2台tomcat
nginx.conf的配置文件:
调用vhosts.conf文件,
打开ngixn测试页面,测试效果:轮训后端的jsp测试页面!
如果要访问前端Nginx的静态页面,
测试结果:
1、apache、nginx都用来处理html、css、js等静态页面请求的内容!
2、php处理php语言!
3、tomcat、java处理jsp!
实时动静分离、静态页面走前段、动态页面走后端、提升页面的处理效率!
六、Tomcat优化
线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下:
Linux内核的优化
服务器资源配置的优化
Tomcat参数优化
配置负载集群优化
这里着重讲解tomcat参数的优化:server.xml文件,关闭DNS查询、配置最大并发等参数。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="5000"
minSpareThreads="20"
acceptCount="1000"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
Catalina.sh JVM参数优化,添加如下内容:
CATALINA_OPTS="$CATALINA_OPTS �CXms4000M �CXmx4000M �CXmn1000M -XX:SurvivorRatio=4-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=82-DLOCALE=UTF-16LE -DRAMDISK=/-DUSE_RAM_DISK=ture -DRAM_DISK=true"
把以上参数添加进来:vim /usr/local/tomcat1/bin/catalina.sh
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
[ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
[ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
CATALINA_OPTS="$CATALINA_OPTS �CXs500M �CXx1000M �CXmn100M -XX:SurvivorRatio=4-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=82-DLOCALE=UTF-16LE -DRAMDISK=/-DUSE_RAM_DISK=ture -DRAM_DISK=true"
为了提升整个网站性能,还需要在tomcat前面架设nginx web反向代理服务器,用以提高用户高速访问。
[root@Cacti ~]# ab -c 1000 -n 1000 http://www.jfedu.net/index.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.jfedu.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: www.jfedu.net
Server Port: 80
Document Path: /index.php
Document Length: 235 bytes
Concurrency Level: 1000
Time taken for tests: 1.579 seconds
Complete requests: 1000
Failed requests: 995
(Connect: 0, Receive: 0, Length: 995, Exceptions: 0)
Write errors: 0
Non-2xx responses: 1025
Total transferred: 585599 bytes
HTML transferred: 415993 bytes
Requests per second: 633.25 [#/sec] (mean)
Time per request: 1579.156 [ms] (mean)
Time per request: 1.579 [ms] (mean, across all concurrent requests)
Transfer rate: 362.14 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 6 33 19.4 44 59
Processing: 38 514 342.6 338 1328
Waiting: 38 379 313.2 294 1328
Total: 79 547 347.7 394 1380
Percentage of the requests served within a certain time (ms)
50% 394
66% 686
75% 874
80% 878
90% 1039
95% 1189
98% 1197
99% 1341
100% 1380 (longest request)
本文出自 “柏书兵-系统运维” 博客,转载请与作者联系!