标签归档:tomcat

Tomcat性能监控工具Probe简介

Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具。
Lambda Probe 是基于 Web + AJAX 的强大的免费开源工具,可以用来实时管理一个单独的host。LambdaProbe拥有几乎所有Tomcat Manager的功能,可以说是一个增强版本的 Tomcat Manager。除此之外,Tomcat Probe 还拥有很多让开发者和系统管理者更方便的性能。从而使得Tomcat对开发者和管理者更加透明。包括应用程序、数据源、发布、日志、线程、集群、系统信 息、状态、连接器状态这些功能。如配合 JDK 1.5 甚至可以实时的画出 Server 的详细内存占用状态。
下载:
Lambda Probe 的官方地址:http://code.google.com/p/psi-probe/,也可以呀通过附件下载probe-2.3.3.zip
将下载后的war包部署到webapp下即可

 

配置:
配置conf/tomcat-users.xml,其实就是配置tomcat管理的用户
可以参考:http://cuisuqiang.iteye.com/blog/2070357 中的Tomcat监控配置

 

汉化:
下载messages_zh_CN.zip,将其中的 messages_zh_CN.properties 放到 webapps\probe\WEB-INF
改名为messages_cn.properties
最好是把国际化图标也配置到主页下面,工程布局使用的是sitemesh-2.4,修改probe\WEB-INF\jsp\decorators下的probe.jsp来实现
在最下面增加

  1. <a href="?<probe:addQueryParam param='lang' value='cn'/>"><img src="<c:url value='/flags/cn.gif'/>" alt="BR" /></a>

 

访问:
通过http://localhost:8080/probe/?lang=cn 访问汉化的工程,因为默认是英文的
也可以通过下面的国旗图标进行切换,页面如下

Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具。

Lambda Probe 是基于 Web + AJAX 的强大的免费开源工具,可以用来实时管理一个单独的host。LambdaProbe拥有几乎所有Tomcat Manager的功能,可以说是一个增强版本的 Tomcat Manager。除此之外,Tomcat Probe 还拥有很多让开发者和系统管理者更方便的性能。从而使得Tomcat对开发者和管理者更加透明。包括应用程序、数据源、发布、日志、线程、集群、系统信 息、状态、连接器状态这些功能。如配合 JDK 1.5 甚至可以实时的画出 Server 的详细内存占用状态。

Lambda Probe 的官方地址:http://www.lambdaprobe.org,在此可以下载Lambda Probe的最新版本。

用 Tomcat manager 安装 Probe: 下载 Lambda Probe 的 .war 文件,启动Tomcat,进入 Manager url(例如:http://localhost:8080/manager/html),使用“WAR file to deploy”选项加载 probe.war。 也可以手工加载 Probe到 Tomcat 服务器的 webapps 目录下,这里不再赘述。Porbe 支持的 Tomcat 服务器版 本: 5.0, 5.5, 6.0。有时还需要设置manager账户,即在 conf/tomcat-users.xml 中添加 manager 账户, probe 需要这个账户才能正确登录使用;你可以把文件内容改成如下代码所示即可拥有一个用户名为admin,密码都为空的管理员账户(一般情况下,安装配置好 Tomcat后,这一块不需要再做修改,即 Probe 使用 Tomcat 的 Manager 账户):

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <tomcat-users>
  3. <role rolename="tomcat"/>
  4. <role rolename="role1"/>
  5. <role rolename="manager"/>
  6. <role rolename="admin"/>
  7. <user username="tomcat" password="tomcat" roles="tomcat"/>
  8. <user username="both" password="tomcat" roles="tomcat,role1"/>
  9. <user username="role1" password="tomcat" roles="role1"/>
  10. <user username="admin" password="" roles="admin,manager"/>
  11. </tomcat-users>

 

LambdaProbe 1.7b 的中文语言包下载: messages_zh_CN.zip 9KB。使用方法是: 把下载的文件解压缩, 将其中的 messages_zh_CN.properties 放到 $TOMCAT_HOME$\webapps\probe\WEB-INF 下即可。

查看内存使用情况时,未配置前,打开“系统信息”页面中的“内存使用”项,显示如下图中所示的提示信息:


这 时需要修改catalina.bat文件,该文件在Tomcat的安装目录中,如目录:D:\Program Files\Apache Software Foundation\Tomcat 5.0\bin,右键点击该文件,选择“编辑”,在记事本中打开该文件开始修改。在catalina.bat文件中下列代码中添加代码:

  1. rem Guess CATALINA_HOME if not defined
  2. set CURRENT_DIR=%cd%
  3. if not "%CATALINA_HOME%" == "" goto gotHome
  1. rem Guess CATALINA_HOME if not defined
  2. rem --------------------------------------
  3. set CATALINA_OPTS=-Xms512m -Xmx1024m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=29001 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
  4. rem --------------------------------------------------------
  5. set CURRENT_DIR=%cd%
  6. if not "%CATALINA_HOME%" == "" goto gotHome

 

其中,29001是你的jmx.port,在未配置前的红色字体的提示信息中可以看到。

配置好后访问路径:http://localhost:8080/probe/
用户名:admin,密码:空
进入后,界面如图:

打开“系统信息”页面中的“内存使用”项,分析内存各项指标占用情况,如下图:

Probe 的对内存使用状况的监控分析功能有限,只能监控Survivor Space、Perm Gen、Tenured Gen、Eden Space、Code Cache、Total等六种情况,其他情况和六种情况的进一步详细信息就无能为力了。
说明:本文所用Tomcat版本为5.0,所示图片是加载中文包后的图片。

 

Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具。

Lambda Probe 是基于 Web + AJAX 的强大的免费开源工具,可以用来实时管理一个单独的host。LambdaProbe拥有几乎所有Tomcat Manager的功能,可以说是一个增强版本的 Tomcat Manager。除此之外,Tomcat Probe 还拥有很多让开发者和系统管理者更方便的性能。从而使得Tomcat对开发者和管理者更加透明。包括应用程序、数据源、发布、日志、线程、集群、系统信 息、状态、连接器状态这些功能。如配合 JDK 1.5 甚至可以实时的画出 Server 的详细内存占用状态。

Lambda Probe 的官方地址:http://www.lambdaprobe.org,在此可以下载Lambda Probe的最新版本。

用 Tomcat manager 安装 Probe: 下载 Lambda Probe 的 .war 文件,启动Tomcat,进入 Manager url(例如:http://localhost:8080/manager/html),使用“WAR file to deploy”选项加载 probe.war。 也可以手工加载 Probe到 Tomcat 服务器的 webapps 目录下,这里不再赘述。Porbe 支持的 Tomcat 服务器版 本: 5.0, 5.5, 6.0。有时还需要设置manager账户,即在 conf/tomcat-users.xml 中添加 manager 账户, probe 需要这个账户才能正确登录使用;你可以把文件内容改成如下代码所示即可拥有一个用户名为admin,密码都为空的管理员账户(一般情况下,安装配置好 Tomcat后,这一块不需要再做修改,即 Probe 使用 Tomcat 的 Manager 账户):

Java代码  收藏代码
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <tomcat-users>
  3. <role rolename="tomcat"/>
  4. <role rolename="role1"/>
  5. <role rolename="manager"/>
  6. <role rolename="admin"/>
  7. <user username="tomcat" password="tomcat" roles="tomcat"/>
  8. <user username="both" password="tomcat" roles="tomcat,role1"/>
  9. <user username="role1" password="tomcat" roles="role1"/>
  10. <user username="admin" password="" roles="admin,manager"/>
  11. </tomcat-users>

 

LambdaProbe 1.7b 的中文语言包下载: messages_zh_CN.zip 9KB。使用方法是: 把下载的文件解压缩, 将其中的 messages_zh_CN.properties 放到 $TOMCAT_HOME$\webapps\probe\WEB-INF 下即可。

查看内存使用情况时,未配置前,打开“系统信息”页面中的“内存使用”项,显示如下图中所示的提示信息:


这 时需要修改catalina.bat文件,该文件在Tomcat的安装目录中,如目录:D:\Program Files\Apache Software Foundation\Tomcat 5.0\bin,右键点击该文件,选择“编辑”,在记事本中打开该文件开始修改。在catalina.bat文件中下列代码中添加代码:

  1. rem Guess CATALINA_HOME if not defined
  2. set CURRENT_DIR=%cd%
  3. if not "%CATALINA_HOME%" == "" goto gotHome

 

即,添加后代码为:

  1. rem Guess CATALINA_HOME if not defined
  2. rem --------------------------------------
  3. set CATALINA_OPTS=-Xms512m -Xmx1024m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=29001 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
  4. rem --------------------------------------------------------
  5. set CURRENT_DIR=%cd%
  6. if not "%CATALINA_HOME%" == "" goto gotHome

 

其中,29001是你的jmx.port,在未配置前的红色字体的提示信息中可以看到。

配置好后访问路径:http://localhost:8080/probe/
用户名:admin,密码:空
进入后,界面如图:

打开“系统信息”页面中的“内存使用”项,分析内存各项指标占用情况,如下图:

Probe 的对内存使用状况的监控分析功能有限,只能监控Survivor Space、Perm Gen、Tenured Gen、Eden Space、Code Cache、Total等六种情况,其他情况和六种情况的进一步详细信息就无能为力了。
说明:本文所用Tomcat版本为5.0,所示图片是加载中文包后的图片。

 

利用OpenDS统一管理部门内部的账号

现在要为部门搭建一个绿色的环境,将JIRA、WiKi用统一的账号管理。
服务器选择了tomcat6.0,LDAP选择了OpenDS2.2.0,JDK1.6
由于要的是绿色环境,那么把这些东西全部放在一个文件夹下,希望如果要把环境装到别的机器上,只用把这个文件夹COPY走就行。
目录结构如图:

因此要先配置一下TOMCAT,让tomcat去一个相对路径找JDK,在TOMCAT_HOME/bin 下编辑catalina.bat。在里边加上一句

set JAVA_HOME=..\..\jdk

安装OpenDS的步骤:http://www.opends.org/ 通过Java Web Start执行QuickSetup(必须要有JDK,在windows上可行,在Ubuntu上没执行)。

OpenDS服务器配置好以后,双击OpenDS_HOME/bat/control-panel.bat
打开控制台,启动服务。

把一下内容保存成一个ldif文件,如E:\environment\OpenDS\ldif\duke.ldif

# add group

dn: ou=Groups,dc=example,dc=com

changetype: add

ou: Groups

description: Group ou

objectClass: top

objectClass: organizationalUnit

# add people ou

dn: ou=People,dc=example,dc=com

changetype: add

ou: People

description: People

objectClass: top

objectClass: organizationalUnit

# add an authorized user (belongs to the group secure)

dn: uid=duke,ou=People,dc=example,dc=com

changetype: add

objectClass: top

objectClass: person

objectClass: organizationalPerson

objectClass: inetOrgPerson

uid: duke

cn: The Duke

sn: Duke

givenName: The

userPassword: password

# unauthorized user

dn: uid=noaccess,ou=People,dc=example,dc=com

changetype: add

objectClass: top

objectClass: person

objectClass: organizationalPerson

objectClass: inetOrgPerson

uid: noaccess

cn: No Access

sn: access

givenName: no

userPassword: noaccess

# add user to the webapp group

dn: cn=secure,ou=Groups,dc=example,dc=com

changetype: add

objectClass: top

objectClass: groupOfUniqueNames

uniqueMember: uid=duke,ou=People,dc=example,dc=com

cn: secure

然后打开CMD,到Opends\bin下输入ldapmodify -p 389 -a -D "cn=Directory Manager" -w password -f E:\environment\OpenDS\ldif\duke.ldif

这样就为OpenDS添加了一个权限组:secure   两个用户:duke、noaccess  ,并且在secure这个权限组里添加了duke。

可以在控制界面中,在People下添加用户,比如"boris",添加时要选择属性命名,选择uid。然后在secure组成员里添加uid=boris,ou=People,dc=example,dc=com
这样,boris就也有了权限。

现在,要在自己的web project中调用OpenDS的权限验证,先拿一个最简单的project试验出来再说。

首先要修改tomcat的server.xml
在<Engine></Engine>中间加入

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"

    connectionName="cn=Directory Manager"

connectionPassword="boris"

     connectionURL="ldap://localhost:389"

       userPattern="uid={0},ou=people,dc=example,dc=com"

          roleBase="ou=groups,dc=example,dc=com"

          roleName="cn"

        roleSearch="(uniqueMember={0})"/>

第5行中的userPattern定义了验证用户的格式,这里是以uid开头。但是在OpenDS建立用户的时候,默认的是以cn开头的,建立时需要注意。

在TOMCAT_HOME/webapps下建立一个最简单的web project,只有一个index.html 内容是hello。

然后修改WEB-INF下的web.xml 如下:

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xsi="http://www.w3.org/2001/XMLSchema-instance" schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<security-role>

<role-name>secure</role-name>

</security-role>

<!-- grant access to all users that possess the role 'secure' and deny all others -->

<security-constraint>

 <web-resource-collection>

<web-resource-name>opendsauthtest</web-resource-name>

 <url-pattern>/*</url-pattern>

 <http-method>GET</http-method>

<http-method>POST</http-method>

 </web-resource-collection>

<auth-constraint>

 <role-name>secure</role-name>

</auth-constraint>

</security-constraint>

<!-- declare the app uses FORM based authentication using your newly created OpenDS realm -->

<login-config>

 <auth-method>BASIC</auth-method>

 <realm-name>OpenDS</realm-name>

</login-config>

</web-app>

这里并不完全理解,主要注意<role-name>secure</role-name>,这就是要连接OpenDS的权限组的名称。

做完这些,启动tomcat 输入http://localhost:8080/test
弹出输入密码的页面,输入boris  boris   确定,进入到index.html页面。

上篇把OpenDS配置好了。现在要把JSPWiki服务部署起来,并且废弃JSPWiki本身的账号机制,让JSPWiki采用OpenDS的账号机制。

首先把JSPWiki下载下来,地址:http://jspwiki.org/

解压后把里边的JSPWiki.war放在tomcat webapps下。启动tomcat,自动生成了JSPWiki的文件夹。
现在修改JSPWiki的web.xml
在其中添加:

1. 

2. <security-constraint>

3.     <web-resource-collection>

4.     <web-resource-name>Administrative Area</web-resource-name>

5.         <url-pattern>/Delete.jsp</url-pattern>

6.     </web-resource-collection>

7.     <auth-constraint>

8.         <role-name>secure</role-name>

9.     </auth-constraint>

10.     <!--

11.     <user-data-constraint>

12.     <transport-guarantee>CONFIDENTIAL</transport-guarantee>

13.     </user-data-constraint>

14.     -->

15. </security-constraint>

16. 

17. <security-constraint>

18.     <web-resource-collection>

19.     <web-resource-name>Authenticated area</web-resource-name>

20.         <url-pattern>/Edit.jsp</url-pattern>

21.         <url-pattern>/Comment.jsp</url-pattern>

22.         <url-pattern>/Login.jsp</url-pattern>

23.         <url-pattern>/NewGroup.jsp</url-pattern>

24.         <url-pattern>/Rename.jsp</url-pattern>

25.         <url-pattern>/Upload.jsp</url-pattern>

26.         <http-method>DELETE</http-method>

27.         <http-method>GET</http-method>

28.         <http-method>HEAD</http-method>

29.         <http-method>POST</http-method>

30.         <http-method>PUT</http-method>

31.     </web-resource-collection>

32.     <web-resource-collection>

33.         <web-resource-name>Read-only Area</web-resource-name>

34.         <url-pattern>/attach</url-pattern>

35.         <http-method>DELETE</http-method>

36.         <http-method>POST</http-method>

37.         <http-method>PUT</http-method>

38.     </web-resource-collection>

39.     <auth-constraint>

40.         <role-name>wiki-admin</role-name>

41.         <role-name>wiki-users</role-name>

42.     </auth-constraint>

43.     <!--

44.     <user-data-constraint>

45.         <transport-guarantee>CONFIDENTIAL</transport-guarantee>

46.     </user-data-constraint>       -->

47. </security-constraint>

48. 

49. <login-config>

50.     <auth-method>FORM</auth-method>

51.     <form-login-config>

52.         <form-login-page>/LoginForm.jsp</form-login-page>

53.         <form-error-page>/LoginForm.jsp</form-error-page>

54.     </form-login-config>

55.     </login-config>

56.     <security-role>

57.         <description>

58.            This logical role includes all authenticated users

59.         </description>

60.     <role-name>wiki-users</role-name>

61. </security-role>

62. 

63. <security-role>

64.     <description>

65.         This logical role includes all administrative users

66.     </description>

67.     <role-name>secure</role-name>

68. </security-role>

这里需要注意的地方是有两处<role-name>secure</role-name>
里边的值应该是OpenDS里的Group名称,这里的secure是上篇文章中建立OpenDS时设置的一个组。

现在需要确认一下jspwiki.properties里边

1. jspwiki.authorizer =com.ecyrd.jspwiki.auth.authorize.WebContainerAuthorizer

是否被注释掉了,如果被注释掉了,就把注释去掉。让这句话生效。

刚只在web.xml中声明了要用secure的权限才能进入JSPWiki,但JSPWiki中并没有这个权限组,只有OpenDS中有,所以要为JSPWiki添加一个权限组:
用写字板打开jspwiki.policy
在里边加入
grant principal com.ecyrd.jspwiki.auth.authorize.Role "secure"
{    permission com.ecyrd.jspwiki.auth.permissions.AllPermission "*";};

只有就为Wiki服务加入了一个新的角色,拥有所有权利。

现在,可以启动tomcat来test了。
用浏览器打开

http://localhost:8080/JSPWiki/Login.jsp

输入boris/boris
结果如下:

成功了,再看看注册新用户页面:

可以看到,已经不能注册了,因为JSPWiki本身的账号机制已经被废弃了。

Linux中为Tomcat启用软链接的三种方式

本文介绍下,在linux下为tomcat启动软链接的三种方法,有需要的朋友参考下,希望对大家有所帮助。

Liunx上的软链接又叫符号链接,这个文件包含了另一个文件的路径名。
可以是任意文件或目录,可以链接不同文件系统的文件。

链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象,链接文件甚至可以循环链接自己。类似于编程语言中的递归。

软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。

说明:
Tomcat默认情况是不允许软链接的,因此当通过命令行设置软链接后,通过URL访问得到404错误。

介绍三种解决方式(均以项目yourApp为例):

一、在项目的META-INF目录中增加context.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/yourApp" allowLinking="true">
</Context>

二、在Tomcat的/conf/Catalina/localhost/目录下增加名字为项目名的XML配置文件。
创建yourApp.xml文件,文件内容和第一种的文件内容一致,唯一区别在于文件名的不同。

三、直接在tomcat的配置目录conf/的context.xml文件中增加如下属性
在<Context/>标签里面增加:
allowLinking="true"

Linux+nginx+tomcat+JDK整合实现JAVA程序负载均衡

本组合使用软件各个版本:

Centos 5   Nginx-0.7.60-linux.tar.gz   tomcat5.5.27 for linux.zip   jdk1_5_0_09-linux.bin   pcre-7.8.tar.gz

操作系统安装不再详细说明,网上相关文档一大堆。

一.软件安装:

安装JDK

将jdk1_5_0_09-linux.bin文件cp到/usr/local目录下

添加权限:chmod u+x jdk1_5_0_09-linux.bin

执行安装:./ jdk1_5_0_09-linux.bin  按照提示输入yes即可完成安装

安装完成后会在/usr/local下有个名为jdk1.5.0_09的目录

由于我做负载均衡,所以安装了两个tomcat,解压tomcat到/usr/local/tomcat1和/usr/local/tomcat2

分别进入/usr/local/tomcat1/bin和/usr/local/tomcat2/bin目录执行命令:chmod u+x *.Sh  设置权限

Tomcat1保持不变,修改tomcat2下conf中server.xml

<Server port="8005" shutdown="SHUTDOWN">

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

<!-- Define an AJP 1.3 Connector on port 8009 -->

<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

将红色字体的端口更改成其他不使用的端口,例如:8005更改为9005,8080更改为8081,8009更改为9009

修改tomcat2下bin中的startup.sh和shutdown.sh添加以下内容

export JAVA_HOME=/usr/local/java1.5.0_09

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=$JAVA_HOME/lib

export CATALINA_HOME=$CATALINA_2_HOME

export CATALINA_BASE=$CATALINA_2_BASE

vi /etc/profile  配置系统变量,打开后添加以下内容:

JAVA_HOME=/usr/local/java1.5.0_09

export JAVA_HOME

CATALINA_BASE=/usr/local/tomcat1

CATALINA_HOME=/usr/local/tomcat1

export CATALINA_BASE CATALINA_HOME

TOMCAT_HOME=/usr/local/tomcat1

export TOMCAT_HOME

CATALINA_2_BASE=/usr/local/tomcat2

CATALINA_2_HOME=/usr/local/tomcat2

export CATALINA_2_BASE CATALINA_2_HOME

TOMCAT_2_HOME=/usr/local/tomcat2

export TOMCAT_2_HOME

JRE_HOME=/usr/local/java1.5.0_09/jre

export JRE_HOME

CLASSPATH=/usr/local/java1.5.0_09/lib: /usr/local/java1.5.0_09/jre/lib

export  CLASSPATH

PATH=$PATH:/usr/local/java1.5.0_09/bin:/usr/local/java1.5.0_09/jre/bin:/usr/local/tomcat1/bin:/usr/local/tomcat2/bin

export PATH

保存退出,logout 注销一下

测试JDK是否安装成功

Java –version

看是否显示为刚刚安装的jdk版本名称

分别进入/usr/local/tomcat1/bin和/usr/local/tomcat2/bin目录执行./startup.sh

访问http://local:8080/http://localhost:8081/看是否可以看到tomcat的欢迎界面

设置tomcat随系统启动

vi /etc/rc.d/rc.local 添加以下内容

/usr/local/tomcat1/bin/startup.sh

/usr/local/tomcat2/bin/startup.sh

安装nginx,在安装nginx之前需要先安装所需的pcre库

解压我们下载的pcre-7.8.tar.gz

tar zxvf pcre-7.8.tar.gz

cd pcre-7.8

./configure

make

make install

安装完毕

解压nginx-0.7.60-linux.tar.gz

tar zxvf nginx-0.7.60-linux.tar.gz

./configure--user=www--group=www--prefix=/usr/local/nginx--with-http_stub_status_module--with-http_ssl_module

创建代理文件 vi /usr/local/nginx/conf/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 600;

proxy_read_timeout 600;

proxy_send_timeout 600;

proxy_buffer_size 8k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

保存退出。

编辑nginx.conf文件 vi /usr/local/nginx/conf/nginx.conf 修改如下

#运行用户

#user  nobody;

#启用进程

worker_processes  2;

#全局错误日志和pid

error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

pid        logs/nginx.pid;

#工作模式及连接数上限

worker_rlimit_nofile 51200;

events {

worker_connections  51200;

}

#配置http已经反向代理做负载均衡

http {

include       mime.types;

default_type  application/octet-stream;

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

sendfile        on;

#tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;

#gzip  on;

#配置负载均衡服务列表,weight参数表示权重值,值越大权重越高

upstream proxyserver {

#ip_hash;

server localhost:8080 weight=6;

server localhost:8081 weight=1;

}

server {

#端口以及域名配置

listen       80;

server_name  www.xxxx.com;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location ~ ^/NginxStatus/ {

stub_status on;

access_log off;

}

#设定默认首页

location / {

root   /wwwroot/ROOT;

index  index.html login.jsp;

}

#禁止访问WEB-INF

location ~ ^/(WEB-INF)/ {

deny all;

}

#设定浏览器访问时nginx直接处理和需缓存的文件后缀以及时间参数

location ~ \.(gif|jpg|jpeg|png|bmp|ico|rar|css|zip|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {

root /wwwroot/ROOT;

expires 24h;

}

location ~ \.(htm|html)$ {

root /wwwroot/ROOT;

}

#设定此后缀的文件利用反向代理转给负载均衡列表中的tomcat处理

location ~ \.jsp$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.do$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.js$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.xml$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ ^/dwr/ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ ^/html/fckeditor/ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

server {

listen       80;

server_name  www.1234.com;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location ~ ^/NginxStatus/ {

stub_status on;

access_log off;

}

location / {

root   /wwwroot/ROOT;

index  col.html login.jsp;

}

location ~ ^/(WEB-INF)/ {

deny all;

}

location ~ \.(gif|jpg|jpeg|png|bmp|ico|rar|css|zip|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ {

root /wwwroot/ROOT;

expires 24h;

}

location ~ \.(htm|html)$ {

root /wwwroot/ROOT;

}

location ~ \.jsp$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.do$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.js$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ \.xml$ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ ^/dwr/ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location ~ ^/html/fckeditor/ {

proxy_pass http://proxyserver;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

}

Nginx 启动命令:sbin/nginx

最后就是设置tomcat集群所需的session同步

分别打开tomcat1和tomcat2下conf中server.xml

找到<Engine name="Catalina" defaultHost="localhost">

Tomcat1下的修改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">

Tomcat2下的修改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">

找到

<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

managerClassName="org.apache.catalina.cluster.session.DeltaManager"

expireSessionsOnShutdown="false"

useDirtyFlag="true"

notifyListenersOnReplication="true">

<Membership

className="org.apache.catalina.cluster.mcast.McastService"

mcastAddr="228.0.0.4"

mcastPort="45564"

mcastFrequency="500"

mcastDropTime="3000"/>

<Receiver

className="org.apache.catalina.cluster.tcp.ReplicationListener"

tcpListenAddress="127.0.0.1"

tcpListenPort="4001"

tcpSelectorTimeout="100"

tcpThreadCount="6"/>

<Sender

className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"

replicationMode="pooled"

ackTimeout="15000"

waitForAck="true"/>

<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"

filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>

</Cluster>

将注释去掉启用此功能,注意两处修改

tcpListenAddress="127.0.0.1"

tcpListenPort="4001"

tcpListenAddress修改为此tomcat所在机器的IP地址,如果两个tomcat在同一台服务器上那么tcpListenPort的端口需要修改,如果不在同一台服务器上只需要修改IP即可。

Linux下默认没有开启组播功能,所以需要开下

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

如果需要在服务器启动时即开通组播需要修改

Vi /etc/sysconfig/static-routes

添加以下内容

eht0 net 224.0.0.0 netmask 240.0.0.0

还需要在程序的web.xml里面</web-app>前面加入以下这句话

<distributable/>
session同步到这里设置完毕

优化linux内核

vi /etc/sysctl.conf

在末尾添加以下内容

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 5000    65000

使设置立即生效:/sbin/sysctl –p

ulimit –a 查看系统资源限制设定

ulimit -n 4096 修改open file 参数值为4096

用ulimit -n 修改open files 总是不能保持。所以用下面一个简单的办法更好些。
修改/etc/security/limits.conf 添加如下一行:
* - nofile 1006154
修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so

Nginx tomcat session配置文件说明

Linux软件安装

一、 Pcre+nginx + nginx_upstream_jvm_route安装

a.安装pcre

tar zxvf pcre-7.2.tar.gz

cd pcre

./configure –prefix = /pcre

Make;make install

b,安装nginx

tar zxvf nginx-0.6.32.tar.gz

cd nginx-0.6.32

#patch -p0 < ./nginx-upstream-jvm-route-read-only/jvm_route.patch

./configure –prefix=/nginx –with-pcre=/pcre –with-http_rewrite_module --add-module=/root/nginx-upstream-jvm-route-read-only

#make;

#make install

二、 修改nginx.conf文件

修改成以下内容:

#user  nobody;

worker_processes  5;

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {

use epoll;

worker_connections  2048;

}

http {

upstream backend {

server localhost:8087 invalid=web_tomcat2;  #负载均衡服务器

server localhost:8088 invalid=web_tomcat1;  #负载均衡服务器

jvm_route $cookie_JSESSIONID|sessionid reverse;

}

include       mime.types;

default_type  application/octet-stream;

charset UTF-8;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

client_max_body_size 20m;

limit_rate  1024k;

sendfile on;

tcp_nopush     on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

gzip on;

gzip_min_length  1k;

gzip_buffers     4 16k;

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types       text/plain application/x-javascript text/css application/xml;

gzip_vary on;

#limit_zone  crawler  $binary_remote_addr  10m;

server {

listen       80;

server_name  localhost;

index index.jsp index.htm index.html;

root  /usr/local/program/xhxw_web;

#access_log  logs/host.access.log  main;

location / {

proxy_pass  http://backend;    #设为反向代理

proxy_redirect    off;

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header  Host $http_host;

}

location ~ .*\.(htm|html|ico|gif|jpg|jpeg|png|bmp|swf)$

{

expires      30d;

}

location ~ .*\.(js|css)?$

{

expires      1h;

}

location /Nginxstatus {

stub_status on;

access_log   off;

}

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

}

server {

listen       80;

server_name  cms.xhxw.com;

index index.jsp index.htm index.html;

root  /usr/local/program/xhxw;

#access_log  logs/host.access.log  main;

location / {

proxy_pass  http://localhost:8058;

proxy_redirect    off;

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_set_header  X-Real-IP  $remote_addr;

proxy_set_header  Host $http_host;

}

}

}

测试 配置文件是否有错 /usr/local/nginx/sbin/nginx –t

如果出现:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

configuration file /usr/local/nginx/conf/nginx.conf test is successful

说明配置成功

三、 Tomcat配置文件修改

修改server.xml

在 <Engine name="Catalina" defaultHost="localhost"> 加上 jvmRoute="web_tomcat1"

添加后:<Engine name="Catalina" defaultHost="localhost" jvmRoute="web_tomcat1">。

在 <Engine name="Catalina" defaultHost="localhost" jvmRoute="web_tomcat1">下面添加

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="224.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4001"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

<!-- timeout="60000"-->

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

多个tomcat的话一定要修改 成不同的port .port="4001"

需要修改程序web.xml ,</web-app>前面加入以下这句话
<distributable/>
session同步到这里设置完毕