Resin介绍及其使用配置

  1. Resin介绍及其使用配置

    Resin是一个提供高性能的,支持 Java/PHP 的应用服务器。目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者、开发人员和低流量网站使用;一种是收费的专业版本,增加了一些更加适用于生产环境的特性。

    Resin的一些特性:

    可靠性:Resin包含了很多可靠的特性,包括服务器自动重启、检测并重启死锁的服务器、管理JVM内存以防止内存泄露等。

    集群:Resin可以将多个服务器作为一个服务器来对客户进行响应,从而增强服务器的扩展能力。

    持久和分布的sessions:持久的session能够在服务器重启的时候保持现有的Http会话,分布式的session可以在多个服务器之间共享Http会话的状态。

    增强的本地代码:同时为Windows和Linux系统提供了本地的代码增强支持。能够改善Socket链接、持久链接和文件读写方面的性能。

    OpenSSL:提供原生的OpenSSL库支持,比JSSE提供的方案要好很多。

    HTTP代理缓存:能够通过内存和磁盘缓存系统提高服务器的性能表现,将动态页面的速度提高到接近静态页面。

    Gzip过滤器:通过gzip来减少带宽。

     

    Resin服务器的安装(Windows - 独立版)

    1、安装JDK1.5或更高

    2、确保JDK的安装以及正确设置了环境变量JAVA_HOME

    3、解压Resin文件

    4、执行 java –jar resin-3.1.8/lib/resin.jar

    5、或者运行 http.exe

    6、在浏览器地址栏中输入 http://localhost:8080 即可进行访问

     

    我们也可以将Resin设置为系统服务。

     

    虚拟机的配置

    Resin的配置文件位于 ./conf/ 下,默认的配置文件为 resin.conf。

    配置简单的虚拟机,我们只要加入

      <host host-name="test.heep.com" root-directory="D:\workspaces\java\testsys"> 
        <access-log path="logs/test.access.log" 
              format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' 
              rollover-period="1W"/>

        <web-app id="/" root-directory="WebRoot/">

        </web-app> 
      </host> 
    </cluster>

    另外在host文件中加入对应的记录,这样,我们就可以访问 http://test.heep.com 了


  2. <!--  Resin 3.1 配置文件. -->  
  3. <resin xmlns="http://caucho.com/ns/resin" xmlns:resin="http://caucho.com/ns/resin/core">  
  4.   <!-- 加载resin/lib下的所有.jar文件-->  
  5.   <class-loader>  
  6.     <tree-loader path="${resin.home}/lib"/>  
  7.     <tree-loader path="${resin.root}/lib"/>  
  8.   </class-loader>  
  9.   <!--  管理配置 -->  
  10.   <management path="${resin.root}/admin">  
  11.   </management>  
  12.   <!--   JDK日志接口的配置.   -->  
  13.   <log name="" path="stdout:" timestamp="[%H:%M:%S.%s] "/>  
  14.   <!-- 日志信息的级别:'info' 生产环境  'fine' 开发环境 'finer' 调试环境 -->  
  15.   <logger name="com.caucho" level="info"/>  
  16.   <logger name="com.caucho.java" level="config"/>  
  17.   <logger name="com.caucho.loader" level="config"/>  
  18.   <!--  环境上下文的检测时间,对于生产站点, 这个要设置长一点,例如600秒,10分钟  -->  
  19.   <dependency-check-interval>2s</dependency-check-interval>  
  20.   <!--      发送邮件通知的SMTP服务器     -->  
  21.   <system-property mail.smtp.host="127.0.0.1"/>  
  22.   <system-property mail.smtp.port="25"/>  
  23.   <!--      你可以把编译器改成 "javac", "eclipse" 或者 "internal".    -->  
  24.   <javac compiler="internal" args="-source 1.5"/>  
  25.   
  26.   <!-- Security providers. -->  
  27.       <security-provider>  
  28.          com.sun.net.ssl.internal.ssl.Provider  
  29.       </security-provider>  
  30.   
  31.   <!-- 去掉注释,如果你使用resin提供的xml应用 -->  
  32.         
  33.       <system-property javax.xml.parsers.DocumentBuilderFactory  
  34.                       ="com.caucho.xml.parsers.XmlDocumentBuilderFactory"/>  
  35.       <system-property javax.xml.parsers.SAXParserFactory  
  36.                       ="com.caucho.xml.parsers.XmlSAXParserFactory"/>  
  37.     
  38.   <cluster id="app-tier">  
  39.     <!-- 设置集群上下文的根, 相对于server.root -->  
  40.     <root-directory>.</root-directory>  
  41.     <server-default>  
  42.       <!-- HTTP服务的端口-->  
  43.       <http address="*" port="8080"/>  
  44.       <!-- SSL端口配置: -->  
  45.             
  46.           <http address="*" port="8443">  
  47.             <openssl>  
  48.               <certificate-file>keys/gryffindor.crt</certificate-file>  
  49.               <certificate-key-file>keys/gryffindor.key</certificate-key-file>  
  50.               <password>test123</password>  
  51.             </openssl>  
  52.           </http>  
  53.          
  54.       <!--          JVM参数设置        -->  
  55.       <jvm-arg>-Xmx256m</jvm-arg>  
  56.       <jvm-arg>-Xss1m</jvm-arg>  
  57.       <jvm-arg>-Xdebug</jvm-arg>  
  58.       <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>  
  59.       <!-- Uncomment to enable admin heap dumps 去掉这个如果你想管理内存堆的倾倒 -->  
  60.           <jvm-arg>-agentlib:resin</jvm-arg>  
  61.   
  62.       <watchdog-arg>-Dcom.sun.management.jmxremote</watchdog-arg>  
  63.       <!--   强制resin强制重起时的最小空闲内存    -->  
  64.       <memory-free-min>1M</memory-free-min>  
  65.       <!-- 最大线程数量. -->  
  66.       <thread-max>256</thread-max>  
  67.       <!--  套接字等待时间 -->  
  68.       <socket-timeout>65s</socket-timeout>  
  69.       <!-- 配置 keepalive -->  
  70.       <keepalive-max>128</keepalive-max>  
  71.       <keepalive-timeout>15s</keepalive-timeout>  
  72.       <!--          如果使用的是UNIX,这里是启动的帐号和用户组. -->  
  73.           <user-name>resin</user-name>  
  74.           <group-name>resin</group-name>  
  75.         
  76.     </server-default>  
  77.     <!-- 定义群集服务器 -->  
  78.     <server id="" address="127.0.0.1" port="6800"/>  
  79.     <!--    Configures the persistent store for single-server or clustered 配置独立服务器或者群集的持久化存储,专业版的功能    -->  
  80.     <resin:if test="${resin.isProfessional()}">  
  81.       <persistent-store type="cluster">  
  82.         <init path="session"/>  
  83.       </persistent-store>  
  84.     </resin:if>  
  85.     <!--   为了安全, 你可以为SSL会话(SSL sessions)定义一个不同的cookie. -->  
  86.         <ssl-session-cookie>SSL_JSESSIONID</ssl-session-cookie>  
  87.       
  88.     <!--  缓存启用 (专业版的功能)   -->  
  89.     <resin:if test="${isResinProfessional}">  
  90.       <cache path="cache" memory-size="64M">  
  91.         <!-- Vary header rewriting for IE -->  
  92.         <rewrite-vary-as-private/>  
  93.       </cache>  
  94.     </resin:if>  
  95.     <!-- 启用周期性的服务器状态检查和死锁检查,所有的服务器可以添加 <url> 来检查。  -->  
  96.     <resin:if test="${isResinProfessional}">  
  97.       <ping>  
  98.         <!-- <url>http://localhost:8080/test-ping.jsp</url> -->  
  99.       </ping>  
  100.     </resin:if>  
  101.     <!-- 包含web应用的默认行为  -->  
  102.     <resin:import path="${resin.home}/conf/app-default.xml"/>  
  103.     <!-- 每一个web应用的默认参数  -->  
  104.     <web-app-default>  
  105.       <!-- 扩展库的公共jar文件,扩展是安全的即使没有类装载器知道的jars,装载的类将为每个应用分别装载,也就是这些类都是不同的 -->  
  106.       <class-loader>  
  107.         <tree-loader path="${server.root}/ext-webapp"/>  
  108.       </class-loader>  
  109.       <!--  设置缓存页、静态也的延时值  -->  
  110.       <cache-mapping url-pattern="/" expires="5s"/>  
  111.       <cache-mapping url-pattern="*.gif" expires="60s"/>  
  112.       <cache-mapping url-pattern="*.jpg" expires="60s"/>  
  113.       <cache-mapping url-pattern="*.png" expires="60s"/>  
  114.       <!-- 启用EL表达式 -->  
  115.       <allow-servlet-el/>  
  116.       <!--   安全原因, 默认禁用了会话的URLs -->  
  117.       <session-config>  
  118.         <enable-url-rewriting>false</enable-url-rewriting>  
  119.       </session-config>  
  120.       <!-- 安全原因, 在cookies中设置HttpOnly标志 -->  
  121.           <cookie-http-only/>  
  122.             
  123.       <!--一些JSP包有不正确的 .tld文件。可以把validate-taglib-schema设置成false,可能继续正常工作 Some JSP packages have incorrect .tld files.  It's possible to set validate-taglib-schema to false to work around these packages. -->  
  124.         <jsp>  
  125.           <validate-taglib-schema>true</validate-taglib-schema>  
  126.           <fast-jstl>true</fast-jstl>  
  127.           <fast-jsf>true</fast-jsf>  
  128.         </jsp>  
  129.     </web-app-default>  
  130.     <!-- 简单的数据池配置 -->  
  131.         The JDBC name is java:comp/env/jdbc/test  
  132.          <database>  
  133.            <jndi-name>jdbc/mysql</jndi-name>  
  134.            <driver type="org.gjt.mm.mysql.Driver">  
  135.              <url>jdbc:mysql://localhost:3306/test</url>  
  136.              <user></user>  
  137.              <password></password>  
  138.             </driver>  
  139.             <prepared-statement-cache-size>8</prepared-statement-cache-size>  
  140.             <max-connections>20</max-connections>  
  141.             <max-idle-time>30s</max-idle-time>  
  142.           </database>  
  143.             
  144.     <!-- 定义所有虚拟主机的默认配置 -->  
  145.     <host-default>  
  146.       <!-- 如果和别的web服务器整合,这个可以被去掉,因为web服务器也可以记录这些信息。  -->  
  147.       <access-log path="logs/access.log" format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' rollover-period="1W"/>  
  148.       <!-- war 文件的布置目录  -->  
  149.       <web-app-deploy path="webapps"/>  
  150.       <!-- ear文件的布置目录 -->  
  151.       <ear-deploy path="deploy">  
  152.         <ear-default>  
  153.           <ejb-server>  
  154.             <config-directory>WEB-INF</config-directory>  
  155.             <data-source>jdbc/test</data-source>  
  156.           </ejb-server>  
  157.         </ear-default>  
  158.       </ear-deploy>  
  159.       <!-- rar文件的布置目录 -->  
  160.       <resource-deploy path="deploy"/>  
  161.     </host-default>  
  162.     <!-- 虚拟主机的布置目录 -->  
  163.     <host-deploy path="hosts">  
  164.       <host-default>  
  165.         <resin:import path="host.xml" optional="true"/>  
  166.       </host-default>  
  167.     </host-deploy>  
  168.     <!-- 默认的虚拟主机配置 -->  
  169.     <host id="" root-directory=".">  
  170.       <!-- 配置默认的应用 webapp's ROOT        -->  
  171.       <web-app id="/" root-directory="webapps/ROOT"/>  
  172.       <web-app id="/resin-admin" root-directory="${resin.home}/php/admin">  
  173.         <!--  管理应用程序 /resin-admin password is the md5 hash of the password。md5码的密码。 localhost is true to limit access to the localhost。localhost设置成true,这样只有localhost才能访问 -->  
  174.         <prologue>  
  175.           <resin:set var="resin_admin_user" value=""/>  
  176.           <resin:set var="resin_admin_password" value=""/>  
  177.           <resin:set var="resin_admin_external" value="false"/>  
  178.         </prologue>  
  179.       </web-app>  
  180.     </host>  
  181.   </cluster>  
  182.   <!--  Configuration for the web-tier/load-balancer  -->  
  183.   <resin:if test="${resin.isProfessional()}">  
  184.     <cluster id="web-tier">  
  185.       <server-default>  
  186.         <!-- The http port -->  
  187.         <http address="*" port="9080"/>  
  188.       </server-default>  
  189.       <server id="web-a" address="127.0.0.1" port="6700"/>  
  190.       <cache path="cache" memory-size="64M"/>  
  191.       <host id="">  
  192.         <web-app id="/">  
  193.            <rewrite-dispatch>  
  194.              <load-balance regexp="" cluster="app-tier"/>  
  195.            </rewrite-dispatch>  
  196.         </web-app>  
  197.       </host>  
  198.     </cluster>  
  199.   </resin:if>  
  200. </resin>  

resin配置介绍二

Resin是一个Servlet容器.使用Resin开发Java Web项目时,需要建立自己的WebApp。
Resin中的应用可以有2种方式发布:
  是在Resin的目录下发布;
  是打包成War发布
一、resin.conf配置文件说明[Resin3.1下的]

1.<http host='localhost' port='80'/>
   host参数指定的是服务器,port指定的是http端口,默认是localhost和8080。
2. <web-app>标签
   该标签表示一个web应用,标签中,id属性表示该应用的Web路径。
    如<web-app id='/test'>,表示该应用在Web上访问的时候应该用http://hostname/test/来访问。
    app-dir属性表示该应用的实际路径。如
    <app-dir>d:resindoctest</app-dir>表示该应用在d:resin doctest目录下面。默认值为根下面的和id同名的目录。
3.Resin可以配置3种error-page:
    404错误也就是文件找不到错误页;
    Exception违例页;
    不能连接java引擎页。

    他们分别可以这样子设置:
 
    404文件找不到页
    <web-app id='/app1'>
     <error-page error-code='404' location='/file_not_found.jsp'/>
    </web-app>
 
    Exception 违例页
    <web-app id='/foo'>
     <error-page exception-type='java.lang.NullPointerException' location='/nullpointer.jsp'/>
    </web-app>
 
    不能连接到srun Servlet引擎错误页
 
    该页设置和应用无关,属于服务器的设置。
    <http-server>
     <error-page exception-type='connection' location='/missing_file.html'/>
    </http-server>
 
    参见下面的语句:
    <classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>
 
    id参数的值表示classpath中编译后的class的存放路径;
      source参数的值表示classpath中java源代码的存放路径;
      compile中的值可能是true或者false,表示是否由Resin的srun自动编译java源代码。
      Classpath的设置一般和javaBean或者Servlet的使用有关。
      id的值表示javaBean的编译好的包存放的根,
      source的值表示javaBean的java源代码存放的根。
      Servlet相同。
6.  Servlet的设置
      <servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
    <servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
    <servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>
    一般就是指定那些需要通过srun的解析。比如在这里,把*.jsp改成*.jss,其他不变,那么只要在访问时遇到*.jss的文件就和原来遇到*.jsp一样处理。通过这个可以指定解析的引擎,
    如以下的配置:
    <servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
    在Servlet中,也可以指定servlet。如
    <servlet servlet-name='hello' servlet-class='test.HelloWorld'/>
    <servlet-mapping url-pattern='/hello.html' servlet-name='hello'/>
    在servlet-mapping中有个重要的参数case-sensitive 如果在windows上,最好配置成false,忽略大小写,从而和windows的约定一致。
7.  Session的配置
      <session-config>
    <session-max>4096</session-max>
    <session-timeout>30</session-timeout>
    <enable-cookies>true</enable-cookies>
    <enable-url-rewriting>true</enable-url-rewriting>
    <file-store>WEB-INF/sessions</file-store>
    </session-config>
 
    session-max :最大 session数量
    session-timeout :session过期时间,以分钟为单位。
     是否允许cookie :指session是否采用cookies。如果采用cookies,浏览器必须支持session才能使用,发布时建议改成false。enable- url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,
    enable-url-rewriting应该设成true比较合适。
     file-store :该配置指示服务器是否把session作为文件存放在服务器上。如果把该项注释掉,则在你的web-app目录下的WEB-Inf/sessions目录不保存序列化后的session对象。Session还有jdbc-store配置,对应着把session通过jdbc永久保存在数据库中。其实也就是会话变量的序列化后的保存和重新载入的物理实现。

resin3.1.6配置文件resin.conf如下:
<resin xmlns="http://caucho.com/ns/resin" xmlns:resin="http://caucho.com/ns/resin/core">
<!-- 加载resin/lib下的所有.jar文件-->
<class-loader>
  <tree-loader path="${resin.home}/lib"/>
  <tree-loader path="${resin.root}/lib"/>
</class-loader>


<!-- - 管理配置 -->
<management path="${resin.root}/admin"></management>


<!-- -JDK日志接口的配置. 日志信息的级别:'info' 生产环境 'fine' 开发环境 'finer' 调试环境 -->
<log name="" level="fine" path="stdout:" timestamp="[%H:%M:%S.%s] "/>
<logger name="com.caucho" level="info"/>
<logger name="com.caucho.java" level="config"/>
<logger name="com.caucho.loader" level="config"/>

<!-- - 环境上下文的检测时间,对于生产站点, 这个要设置长一点,例如600秒,10分钟 -->
<dependency-check-interval>2s</dependency-check-interval>

<!-- - 发送邮件通知的SMTP服务器 -->
<system-property mail.smtp.host="127.0.0.1"/>
<system-property mail.smtp.port="25"/>

<!-- - 你可以把编译器改成 "javac", "eclipse" 或者 "internal". -->
<javac compiler="internal" args="-source 1.5"/>

<!-- Security providers.
- <security-provider>
- com.sun.net.ssl.internal.ssl.Provider
- </security-provider>
-->

<!-- 去掉注释,如果你使用resin提供的xml应用
- <system-property javax.xml.parsers.DocumentBuilderFactory
- ="com.caucho.xml.parsers.XmlDocumentBuilderFactory"/>
- <system-property javax.xml.parsers.SAXParserFactory
- ="com.caucho.xml.parsers.XmlSAXParserFactory"/>
-->

<cluster id="app-tier">
<!-- 设置集群上下文的根, 相对于server.root -->
<root-directory>.</root-directory>
<server-default>
<!-- HTTP服务的端口-->
<http address="*" port="8080"/>
<!--
- SSL端口配置:
-
- <http address="*" port="8443">
- <openssl>
- <certificate-file>keys/gryffindor.crt</certificate-file>
- <certificate-key-file>keys/gryffindor.key</certificate-key-file>
- <password>test123</password>
- </openssl>
- </http>
-->

<!-- - JVM参数设置 -->
<jvm-arg>-Xmx256m</jvm-arg>
<jvm-arg>-Xss1m</jvm-arg>
<jvm-arg>-Xdebug</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
<!-- Uncomment to enable admin heap dumps 去掉这个如果你想管理内存堆的倾倒
- <jvm-arg>-agentlib:resin</jvm-arg>
-->
<watchdog-arg>-Dcom.sun.management.jmxremote</watchdog-arg>
<memory-free-min>1M</memory-free-min><!-- 强制resin重起时的最小空闲内存 -->
<thread-max>256</thread-max><!-- 最大线程数量. -->
<socket-timeout>65s</socket-timeout><!-- 套接字等待时间 -->
<keepalive-max>128</keepalive-max><!-- 配置 keepalive -->
<keepalive-timeout>15s</keepalive-timeout>
</server-default>

<!-- 定义群集服务器 -->
<server id="" address="127.0.0.1" port="6800"/>
<!-- Configures the persistent store for single-server or clustered 配置独立服务器或者群集的持久化存储,专业版的功能 -->
<resin:if test="${resin.isProfessional()}">
<persistent-store type="cluster">
<init path="session"/>
</persistent-store>
</resin:if>

<!-- 为了安全, 你可以为SSL会话(SSL sessions)定义一个不同的cookie.
- <ssl-session-cookie>SSL_JSESSIONID</ssl-session-cookie>
-->

<!-- 缓存启用 (专业版的功能) -->
<resin:if test="${isResinProfessional}">
<cache path="cache" memory-size="64M">
<!-- Vary header rewriting for IE -->
<rewrite-vary-as-private/>
</cache>
</resin:if>

<!-- 启用周期性的服务器状态检查和死锁检查,所有的服务器可以添加 <url> 来检查。 -->
<resin:if test="${isResinProfessional}">
<ping>
<!-- <url>http://localhost:8080/test-ping.jsp</url> -->
</ping>
</resin:if>

<!-- 包含web应用的默认行为 -->
<resin:import path="${resin.home}/conf/app-default.xml"/>
<!-- 每一个web应用的默认参数 -->
<<SPAN class=hilite1>web-app-default</SPAN>>
<!-- 扩展库的公共jar文件,扩展是安全的即使没有类装载器知道的jars,装载的类将为每个应用分别装载,也就是这些类都是不同的-->

<class-loader>
<tree-loader path="${server.root}/ext-webapp"/>
</class-loader>

<!-- 设置缓存页、静态也的延时值 -->
<cache-mapping url-pattern="/" expires="5s"/>
<cache-mapping url-pattern="*.gif" expires="60s"/>
<cache-mapping url-pattern="*.jpg" expires="60s"/>
<cache-mapping url-pattern="*.png" expires="60s"/>
<!-- 启用EL表达式 -->
<allow-servlet-el/>

<!-- 安全原因, 默认禁用了会话的URLs -->
<session-config>
<enable-url-rewriting>false</enable-url-rewriting>
</session-config>

<!-- 安全原因, 在cookies中设置HttpOnly标志
- <cookie-http-only/>
-->

<!--一些JSP包有不正确的 .tld文件。可以把validate-taglib-schema设置成false,可能继续正常工作
- Some JSP packages have incorrect .tld files. It's possible to set validate-taglib-schema to false to work around these
packages.
-->

<jsp>
<validate-taglib-schema>true</validate-taglib-schema>
<fast-jstl>true</fast-jstl>
<fast-jsf>true</fast-jsf>
</jsp>
</<SPAN class=hilite1>web-app-default</SPAN>>

<!-- 简单的数据池配置[The JDBC name is java:comp/env/jdbc/mysql]-->
<database>
<jndi-name>jdbc/mysql</jndi-name>
<driver type="org.gjt.mm.mysql.Driver">
<url>jdbc:mysql://localhost:3306/test</url>
<user></user>
<password></password>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
</database>


<!-- 定义所有虚拟主机的默认配置 -->
<host-default>
<!-- 如果和别的web服务器整合,这个可以被去掉,因为web服务器也可以记录这些信息。 -->
<access-log path="logs/access.log" format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' rollover-period="1W"/>

<!-- war 文件的布置目录 -->
<web-app-deploy path="webapps"/>

<!-- ear文件的布置目录 -->
<ear-deploy path="deploy">
<ear-default>
<ejb-server>
<config-directory>WEB-INF</config-directory>
<data-source>jdbc/test</data-source>
</ejb-server>
</ear-default>
</ear-deploy>

<!-- rar文件的布置目录 -->
<resource-deploy path="deploy"/>
</host-default>


<!-- 虚拟主机的布置目录 -->
<host-deploy path="hosts">
<host-default>
<resin:import path="host.xml" optional="true"/>
</host-default>
</host-deploy>

<!-- 默认的虚拟主机配置 -->
<host id="" root-directory=".">
<!-- 配置默认的应用 webapp's ROOT -->
<web-app id="/" root-directory="webapps/ROOT"/>
<!-- 你的虚拟目录 -->
<web-app id="/justoneweb" root-directory="D:workjustonewebjavaweb"/>
<web-app id="/resin-admin" root-directory="${resin.home}/php/admin">
<!-- - 管理应用程序 /resin-admin
- password is the md5 hash of the password。md5码的密码。
- localhost is true to limit access to the localhost。localhost设置成true,这样只有localhost才能访问
-->
<prologue>
<resin:set var="resin_admin_user" value=""/>
<resin:set var="resin_admin_password" value=""/>
<resin:set var="resin_admin_external" value="false"/>
</prologue>
</web-app>
</host>
<host id="woke.tool.com" >
    <web-app id="/" root-directory="E:resin-3.1.6deployWokeTool1.0" />
  </host>
</cluster>


<!-- - Configuration for the web-tier/load-balancer -->
<resin:if test="${resin.isProfessional()}">
<cluster id="web-tier">
<server-default>
<!-- The http port -->
<http address="*" port="9080"/>
</server-default>
<server id="web-a" address="127.0.0.1" port="6700"/>
<cache path="cache" memory-size="64M"/>
<host id="">
<web-app id="/">
<rewrite-dispatch>
<load-balance regexp="" cluster="app-tier"/>
</rewrite-dispatch>
</web-app>
</host>
</cluster>
</resin:if>
</resin>


二、Resin 的 watchdog(看门狗)介绍
 
为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器。
watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程。
大多数情况下,watchdog从resin.xml中读取配置信息,而不需要其它的附加配置。
某些ISP服务商可能使用特别的配置,为了安全他们会配置watchdog来隔离JVM(Java虚拟主机)。

概述
因为watchdog作为一个服务运行,大多数情况下你根本不需要注意它。
标准的配置下,一个机器上的watchdog可以监视这个机器上所有JVM,因此大部分情况下你不需要修改watchdog的配置。
需要你管理watchdog的任务就是,如果机器发生了问题,停止watchdog,并检查 watchdog日志中Resin服务器的重启事件。
watchdog自动重启崩溃和退出的Resin服务。因此如果你想停止Resin,你需要告诉watchdog来停止Resin实例,或者完全停止watchdog。
使用resin.jar中的主程序(main)来控制watchdog,有用来启动、停止、重启Resin实例的命令,同样还有报告watchdog状态的命令。
大多数用户不需要特别的配置watchdog,但是ISP和大的站点可能创建特殊的watchdog.xml(包含<watchdog- manager>标签)来控制watchdog。
<watchdog-manager>允许ISP控制watchdog,为他们用户的 Resin实例指定附加的命令行参数,包括为他们的用户创建安全的chroot环境的能力。
典型地,watchdog以root帐号运行,然而用户实例使用他们各自的用户id。

命令行
  resin.jar中的主类ResinBoot的命令行用来控制watchdog。主要的操作包括:start、stop、restart、shutdown和status。

start
"start"命令使用给定的server id启动一个新的Resin实例。ResinBoot首先会尝试在当前机器上的watchdog,在需要时会启动一个新的watchdog。
 在resin.xml中定义的server id必须是惟一的。

例如: watchdog启动
resin-3.2.x> java -jar lib/resin.jar -conf conf/test.conf -server a start
Resin/3.2.x started -server 'a' for watchdog at 127.0.0.1:6700

stop
"stop"命令使用给定的server id停止Resin实例。如果停止的实例是watchdog管理的最后一个Resin实例,watchdog也会自动退出。
如果没有指定 -server 参数,watchdog使用默认的 -server "" 。

例子: watchdog停止

resin-3.2.x> java -jar lib/resin.jar stop
Resin/3.2.x started -server '' for watchdog at 127.0.0.1:6600

status
"status"命令统计被watchdog服务管理的Resin实例的状态。
例子: watchdog状态

resin-3.2.x> java -jar lib/resin.jar status
Resin/3.2.x status for watchdog at 127.0.0.1:6600

server '' : active
  password: missing
  user: ferg
  root: /home/test/resin/
  conf: /etc/resin/resin.xml

单一Resin实例
  这个例子显示了一个单一服务器站点,其监听标准的HTTP端口80,并以resin这个用户身份运行。在这个例子中watchdog是以root用户身份运行的,
因此其能够绑定到特殊的端口80上,但是Resin实例是以resin身份运行的。


因为使用了默认的配置,watchdog监听6600端口来获取命令。
例子: /etc/resin/resin.xml

<resin xmlns="http://caucho.com/ns/resin">
<cluster id="">

  <server id="app-a" address="127.0.0.1">
    <user-name>resin</user-name>
    <group-name>resin</group-name>

    <http port="80" />
  </server>

  <resin:import path="${resin.home}/conf/app-default.xml" />

  <host id="">
    <web-app id="" path="/var/www/htdocs" />
  </host>

</cluster>
</resin>


在一个机器上使用共享的watchdog实现负载平衡
  当在一个机器上运行多个Resin实例的时候,一个watchdog-manager就能管理所有的Resin实例。
指定server id用来决定那个Resin实例是start或者stop。
在这个例子中,有一个web-tier服务器做为负载平衡器,两个app-tier服务器处理后台数据,它们都在一个机器上。
为了维护和升级方便,一个站点可能需要多个app-rier服务器。当一个停机的时候,第二个服务器可以继续服务。
这个例子使用默认的watchdog配置,其读取的是标准的resin.xml文件。
watchdog进程和ResinBoot都读取resin.xml 配置文件,因此不需要特别的watchdog配置。
watchdog能够自动发现运行在这个机器上的多个Resin实例并管理它们。


例子: /etc/resin/resin.xml

<resin xmlns="http://caucho.com/ns/resin">

<cluster id="app-tier">

  <server-default>
    <user-name>resin</user-name>
    <group-name>resin</group-name>
  </server-default>

  <server id="app-a" address="192.168.1.10" port="6810" />
  <server id="app-b" address="192.168.1.10" port="6811" />

  <host id="">
    <web-app id="" path="/var/www/htdocs" />
  </host>

</cluster>

<cluster id="web-tier">

  <server-default>
    <user-name>resin</user-name>
    <group-name>resin</group-name>
  </server-default>

  <server id="web-a" address="192.168.1.10" port="6800">
    <http port="80" />
  </server>

  <host id="">
    <web-app id="">
      <rewrite-redirect>
        <load-balance regexp="" cluster="app-tier" />
      </rewrite-redirect>
    </web-app>
  </host>

</cluster>

</resin>

同一机器使用不同的watchdog来实现负载平衡
在某些情况下,最好让每个Resin实例有其自己的watchdog,例如当多个用户在使用相同的机器。每个<server>块配置一个<watchdog-port>。
因为watchdog将读取resin.xml使用<server>块匹配命令行参数中的 -server id,每个watchdog将启动期自己的端口。

例子: /etc/resin/resin.xml

<resin xmlns="http://caucho.com/ns/resin">

<cluster id="app-tier">

  <server-default>
    <user-name>resin</user-name>
    <group-name>resin</group-name>
  </server-default>

  <server id="app-a" address="192.168.1.10" port="6810">
    <watchdog-port>6700</watchdog-port>

    <http port="8080" />
  </server>

  <server id="app-b" address="192.168.1.10" port="6811">
    <watchdog-port>6701</watchdog-port>

    <http port="8081" />
  </server>

  <host id="">
    <web-app id="" path="/var/www/htdocs" />
  </host>

</cluster>

</resin>

  在上面的例子中,启动Resin, 使用 -server app-a参数将启动一个在端口6700上的watchdog,使用 -server app-b参数将启动一个在端口6701上的watchdog。

例子: starting app-b with watchdog-port=6701

resin-3.2.x> java -jar lib/resin.jar -server app-b start

ISP watchdog管理
  在ISP的环境中,你可能需要为watchdog使用一个隔离的配置文件,它为不同的用户启动Resin实例。在这个情况下,你要确保watchdog.xml不能被这些普通用户读取,要创建一个管理用户来读取这个文件。

●启动和重启用户的Resin JVM
●设置JVM参数和Java可执行性
●设置Resin实例的root-directory
●setuid user-name 和 group-name
●设置resin.xml配置
●打开受保护的端口,例如80
●可选的chroot设置

watchdog将使用给定的帐号作为setuid来启动Resin实例。它也能打开任何需要的保护端口,例如80。
例子: /etc/resin/watchdog.xml

<resin xmlns="http://caucho.com/ns/resin">

<management>
  <user name="harry" password="MD5HASH==" />
</management>

<watchdog-manager>

  <watchdog-default>
    <jvm-arg>-Xmx256m</jvm-arg>
  </watchdog-default>

  <watchdog id="user_1">
    <user-name>user_1</user-name>
    <group-name>group_1</group-name>

    <resin-xml>/home/user_1/conf/resin.xml</resin-conf>
    <resin-root>/home/user_1/www</resin-root>

    <open-port address="192.168.1.10" port="80" />
  </watchdog>

  ...

  <watchdog id="user_n">
    <user-name>user_n</user-name>
    <group-name>group_n</group-name>

    <resin-conf>/home/user_n/conf/resin.xml</resin-conf>
    <resin-root>/home/user_n/www</resin-root>

    <open-port address="192.168.1.240" port="80" />
  </watchdog>

</watchdog-manager>

</resin>


posted @ 2014-05-15 16:59  yangkai_keven  阅读(4203)  评论(0编辑  收藏  举报