zoukankan      html  css  js  c++  java
  • resin服务之二----整合resin+Apache服务

    整合resin+Apache服务

    1.为什么要整合Apacheresin

    a. 早期的resintomcathttpd服务支持不好。

    b.  tomcatresinrewriteexpiresgzip功能支持不是很好。

    c.  动静分离。

    开始安装Apache服务

    yum -y install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel

     

    cd /home/peng/tools/

    wget http://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz

    tar -zxf httpd-2.2.23.tar.gz

    cd httpd-2.2.23

    ./configure --prefix=/application/apache2.2.23 --enable-deflate --enable-headers --enable-modules=so --enable-so --with-mpm=worker --enable-rewrite

     

    make && make install

    cd ../

    ln -s /application/apache2.2.23/  /application/apache

    Apache编译resin mod_caucho模块

    cd /application/resin-3.1.13/

    ./configure --with-apxs=/application/apache2.2.23/bin/apxs

    cd /application/resin/modules/c/src/

    make

    make install

     

    查看多出了mod_caucho.so模块:

    [root@data-1-1 src]# ll /application/apache/modules/

    total 180

    -rw-r--r-- 1 root root   9084 Nov 29 07:00 httpd.exp

    -rwxr-xr-x 1 root root 170939 Nov 29 07:05 mod_caucho.so

    提示:这个模块很类似Apache+php结合的PHP模块一样,Apache就是通过这个mod_caucho.so模块调用resin解析Java程序的。

    Apache配置文件中查看resin的配置信息

    root@data-1-1 src]# tail -9 /application/apache/conf/httpd.conf

    #

    # mod_caucho Resin Configuration

    #

     

    LoadModule caucho_module /application/apache2.2.23/modules/mod_caucho.so

     

    ResinConfigServer localhost 6800

    CauchoConfigCacheDirectory /tmp

    CauchoStatus yes

    提示:本段内容是编译后嵌入到httpd.conf中的resin相关配置。

    启动Apache服务测试

    [root@data-1-1 src]# /application/apache/bin/apachectl start

    [root@data-1-1 src]# lsof -i :80

    COMMAND     PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME

    clock-app  2712   root   21u  IPv4 2827507      0t0  TCP www.pp.org:48706->165.254.27.91:http (CLOSE_WAIT)

    httpd     22824   root    4u  IPv6 2840404      0t0  TCP *:http (LISTEN)

    httpd     22826 daemon    4u  IPv6 2840404      0t0  TCP *:http (LISTEN)

    httpd     22828 daemon    4u  IPv6 2840404      0t0  TCP *:http (LISTEN)

    httpd     22829 daemon    4u  IPv6 2840404      0t0  TCP *:http (LISTEN)

    浏览器上输入地址:http://192.168.1.140/查看结果

    出现上述的错误!!

    提示:出现这个问题的原因是Apache把请求都转发给了ResinConfigServer local 6800,而默认的6800端口在resin中未生效,所以报了503错误。

     

    解决办法:

    修改Apache的配置内容

    [root@data-1-1 src]# tail -9 /application/apache/conf/httpd.conf

    #

    # mod_caucho Resin Configuration

    #

     

    LoadModule caucho_module /application/apache2.2.23/modules/mod_caucho.so

     

    ResinConfigServer 192.168.1.140 6911

    CauchoConfigCacheDirectory /tmp

    CauchoStatus yes

     

    重启服务:

    [root@data-1-1 src]# /application/apache/bin/apachectl graceful

     再次刷新页面查看显示结果OK了:

    Apache中配置通过resin解析Java程序

    可以在httpd.conf配置Apache全部向后转发,也可以通过标签匹配配置部分转发,或者在http-vhost.conf中配置虚拟主机 实现部分向后转发。

    httpd.conf配置Apache全部向后转发

    [root@data-1-1 ~]# tail -9 /application/apache/conf/httpd.conf

    # mod_caucho Resin Configuration

    #

     

    LoadModule caucho_module /application/apache2.2.23/modules/mod_caucho.so

     

    ResinConfigServer 192.168.1.140 6911

    SetHandler caucho-request

    CauchoConfigCacheDirectory /tmp

    CauchoStatus yes

    SetHandler caucho-request是转发的作用,就是由Apache代理的,然后把业务转发给resin,全部都往后抛,如果不加此参数,用户访问会走Apache。如果增加了,当用户访问所有的请求都会有Apache转给resin来处理。因此,当未加参数时默认浏览器内容应为Apache服务的默认也It Works,增加了SetHandler,出来的结果就是resin的默认页面了。

    重启Apache服务测试,查看的内容是resin的默认页面:

    当把resin服务停掉后再次查看,所有的请求都丢给resin处理了:

    [root@data-1-1 ~]# killall java

    再次启动resin服务浏览器上查看又OK了!!!

    Apache中配置虚拟主机转发resin解析

    #也可以根据域名虚拟主机只让后端resin处理一部分请求转发

    [root@data-1-1 ~]# cd /application/apache/conf/extra/

    [root@data-1-1 extra]# cp httpd-vhosts.conf  httpd-vhosts.conf_$(date +%F)

    [root@data-1-1 extra]# cat httpd-vhosts.conf

    NameVirtualHost *:80

    <VirtualHost *:80>

        ServerAdmin  835221922@qq.com

        DocumentRoot "/var/www"

        DirectoryIndex index.html index.htm index.jsp

        ServerName www.peng.cc

        ErrorLog   "logs/peng-error_log"

        CustomLog  "logs/peng-access_log" common

     

       <Directory "/var/www">

       Options -Indexes  FollowSymLinks

       AllowOverride None

       Order allow,deny

       Allow from all

       </Directory>

    #Resin Configuration

    ResinConfigServer 192.168.1.140 6911

    #SetHandler caucho-request

    </VirtualHost>

     

    修改Apache主配置文件内容:

       395  # Virtual hosts

       396  Include conf/extra/httpd-vhosts.conf     ---此行注释要打开

    [root@data-1-1 ~]# tail -9 /application/apache/conf/httpd.conf

    # mod_caucho Resin Configuration

    #

     

    LoadModule caucho_module /application/apache2.2.23/modules/mod_caucho.so

     

    #ResinConfigServer 192.168.1.140 6911    ---虚拟主机已配置,这里注释掉!

    #SetHandler caucho-request

    CauchoConfigCacheDirectory /tmp

    CauchoStatus yes

    [root@data-1-1 www]# mkdir -p /var/www/

    [root@data-1-1 www]# echo "www.peng.cc" >/var/www/index.html

    [root@data-1-1 www]# echo '<%=99+1%>' > /var/www/index.jsp

     

    [root@data-1-1 extra]# /application/apache/bin/apachectl graceful

     

    默认实现了动静分离:

    [root@data-1-1 extra]# curl 192.168.1.140/index.html                

    www.peng.cc

    [root@data-1-1 ~]# cat /var/www/index.html

    www.peng.cc

     

    [root@data-1-1 extra]# curl 192.168.1.140/index.jsp

    <html>

    <head><title>Resin® Default Home Page</title></head>

    <body>

    <h1 style="background: #ccddff">Resin® Default Home Page</h1>

    This is the default page for the Resin web server.

    <p>

    Documentation is available <a href="/resin-doc">here</a>.

    <p>

    Administration is available <a href="/resin-admin">here</a>.

    </body>

    </html>

     

    [root@data-1-1 extra]# curl 192.168.1.140/test.jsp

    99+1=100

    [root@data-1-1 ~]# cat /application/resin/webapps/ROOT/test.jsp

    99+1=<%=99+1%>

     

     

    再次测试:

    [root@data-1-1 ~]# cp  /var/www/index.jsp  /var/www/peng.jsp

    [root@data-1-1 ~]# cat /var/www/peng.jsp

    <%=99+1%>

    [root@data-1-1 ~]# curl 192.168.1.140/peng.jsp

    <html>

    <head><title>404 Not Found</title></head>

    <body>

    <h1>404 Not Found</h1>

    /peng.jsp was not found on this server.

    <p /><hr />

    <small>

    Resin/3.1.13

    </small>

    </body></html>

    注意:如果是Apache解析的话,会解析出来结果;而如果是resin解析的话,会报404的错误,所以解析的结果是404,即是resin做了解析。

     

    jsp文件拷贝到resin默认目录下,又可以解析了:

    [root@data-1-1 ~]# cp /var/www/peng.jsp  /application/resin/webapps/ROOT/

    [root@data-1-1 ~]# curl 192.168.1.140/peng.jsp                 

    100

    apache中配置虚拟主机转发resin解析

    配置内容

    [root@data-1-1 ~]# cat /application/apache/conf/extra/httpd-vhosts.conf

    NameVirtualHost *:80

    <VirtualHost *:80>

        DocumentRoot "/var/www"

        DirectoryIndex index.html index.htm index.jsp

        ServerName www.peng.cc

        ErrorLog   "logs/peng-error_log"

        CustomLog  "logs/peng-access_log" common

     

       <Directory "/var/www">

       Options -Indexes  FollowSymLinks

       AllowOverride None

       Order allow,deny

       Allow from all

       </Directory>

    #Resin Configuration

    ResinConfigServer 192.168.1.140 6911

    SetHandler caucho-request

    </VirtualHost>

    启动服务

    [root@data-1-1 ~]# /application/apache/bin/apachectl graceful

    测试

    [root@data-1-1 ~]# curl 192.168.1.140/d.html

    <html>

    <head><title>404 Not Found</title></head>

    <body>

    <h1>404 Not Found</h1>

    /d.html was not found on this server.

    <p /><hr />

    <small>

    Resin/3.1.13

    </small>

    </body></html>

    提示:访问请求先到Apache服务,之后抛给后端的resin,后端没有d.html文件,则报了404错误;若停掉resin服务,则会报503错误。

    [root@data-1-1 ~]# killall java

    [root@data-1-1 ~]# killall java

    java: no process killed

    [root@data-1-1 ~]# curl 192.168.1.140/d.html                           

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

    <html><head>

    <title>503 Service Temporarily Unavailable</title>

    </head><body>

    <h1>Service Temporarily Unavailable</h1>

    <p>The server is temporarily unable to service your

    request due to maintenance downtime or capacity

    problems. Please try again later.</p>

    </body></html>

    调整resin配置支持多vhost主机

    resin主配置文件添加如下内容

    102     <!-- resin Configure at 2016-1-11 -->

    103 <server id='peng01' address='192.168.1.140' port='6912' watchdog-port="6922">

    104      <http address="*" port="8081"/>

       105      <jvm-arg>-Xmx256m</jvm-arg>

       106      <jvm-arg>-Xss1m</jvm-arg>

       107      <jvm-arg>-Xdebug</jvm-arg>

       108      <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>

       109      <memory-free-min>1M</memory-free-min>

       110      <thread-max>256</thread-max>

       111      <socket-timeout>65s</socket-timeout>

       112      <keepalive-max>128</keepalive-max>

       113      <keepalive-timeout>15s</keepalive-timeout>

       114      </server>

    启动脚本修改如下

    [root@data-1-1 conf]# cat /etc/init.d/resin-peng

    #!/bin/bash

    #author at 20160111

    #linux startup script for Resin

    # chkconfig: 345 85 15

    # description: Resin is a Java Web server.

    #             

    #To install,configure this file as needed and copy init.resin

    #to /etc/rc.d/init.d as resin. Then use "# /sbin/chkconfig resin reset"

    #

    . /etc/init.d/functions

    StartPath='/application/resin/bin/httpd.sh'

    ResinLog=/app/logs/resinlog

    [ ! -d $ResinLog ] && mkdir -p $ResinLog

    resind () {

      #如果是多进程增加上面的配置段即可。

      for id in peng peng01

       do

         $StartPath -server $id $1 >>$ResinLog/resin_startup.log

         if [ $? -eq 0 ];then

           action "$1 $id resin..." /bin/true

         else

           action "$1 $id resin..." /bin/false

         fi

    done

    }

    case "$1" in

       start)

            resind $1

            echo "--------checking------"

            sleep 10

            netstat -lnt |egrep "80|69"

            echo "--------checkover-----"

            ;;

      stop)

            resind $1

            ;;

      restart)

             resind stop

             resind start

            ;;

        *)

           echo "Usage: $0 {start|stop|restart}"

           exit 1

      esac

       exit 0

    启动服务

    [root@data-1-1 conf]# /etc/init.d/resin-peng restart

    stop peng resin...                                         [FAILED]

    stop peng01 resin...                                       [FAILED]

    start peng resin...                                        [  OK  ]

    start peng01 resin...                                      [  OK  ]

    查看端口

    [root@data-1-1 ~]# netstat -lnt |egrep "80|69"

    tcp        0      0 ::ffff:192.168.1.140:6911   :::*                        LISTEN     

    tcp        0      0 ::ffff:192.168.1.140:6912   :::*                        LISTEN     

    tcp          0       0 ::ffff:127.0.0.1:6921       :::*                        LISTEN     

    tcp          0       0 ::ffff:127.0.0.1:6922       :::*                        LISTEN     

    tcp                0           0 :::8080                     :::*                        LISTEN       

    tcp              0        0 :::80                       :::*                        LISTEN      

    tcp              0      0 :::8081                     :::*                        LISTEN   

    apache中配置多个虚拟主机实现不同resin解析

    [root@data-1-1 ~]# cat /application/apache/conf/extra/httpd-vhosts.conf

    NameVirtualHost *:80

    <VirtualHost *:80>

        DocumentRoot "/var/www"

        DirectoryIndex index.html index.htm index.jsp

        ServerName www.peng.cc

        ErrorLog   "logs/peng-error_log"

        CustomLog  "logs/peng-access_log" common

     

       <Directory "/var/www">

       Options -Indexes  FollowSymLinks

       AllowOverride None

       Order allow,deny

       Allow from all

       </Directory>

    #Resin Configuration

    ResinConfigServer 192.168.1.140 6911

    SetHandler caucho-request

    </VirtualHost>

    <VirtualHost *:80>

        DocumentRoot "/var/blog"

        DirectoryIndex index.html index.htm index.jsp

        ServerName www.peng.org

        ErrorLog   "logs/peng01-error_log"

        CustomLog  "logs/peng01-access_log" common

     

       <Directory "/var/blog">

       Options -Indexes  FollowSymLinks

       AllowOverride None

       Order allow,deny

       Allow from all

       </Directory>

    #Resin Configuration

    ResinConfigServer 192.168.1.140 6912

    #SetHandler caucho-request

    </VirtualHost>

     

    测试语法并启动服务:

    [root@data-1-1 ~]# /application/apache/bin/apachectl -t

    Warning: DocumentRoot [/var/blog] does not exist

    httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.10.140 for ServerName

    Syntax OK

    [root@data-1-1 ~]# mkdir -p /var/blog

    [root@data-1-1 ~]# /application/apache/bin/apachectl graceful

     

    查看hosts文件:

    [root@data-1-1 ~]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    192.168.10.140 data-1-1

    192.168.1.140 www.pp.org

     

    测试:

    [root@data-1-1 ~]# echo www.pp.org >/var/blog/index.html

    [root@data-1-1 ~]# curl www.pp.org

    www.pp.org

    [root@data-1-1 ~]# curl www.pp.org/peng.jsp

    100

    提示:此时查看的结果都是后端resin6912给的结果,那么我们想后端resin有不同的站点目录。该怎么解决呢?

    修改resin主配置文件

    删除如下内容:

    227     <!--

    228        - Default host configuration applied to all virtual hosts.

    229       -->

    230     <host-default>

    231       <!--

    232          - With another web server, like Apache, this can be commented out

    233          - because the web server will log this information.

    234         -->

    235       <access-log path="logs/access.log"

    236             format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'

    237             rollover-period="1W"/>

    238

    239       <!-- creates the webapps directory for .war expansion -->

    240       <web-app-deploy path="webapps"/>

    241

    242       <!-- creates the deploy directory for .ear expansion -->

    243       <ear-deploy path="deploy">

    244         <ear-default>

    245           <ejb-server>

    246             <config-directory>WEB-INF</config-directory>

    247           </ejb-server>

    248         </ear-default>

    249       </ear-deploy>

    250

    251       <!-- creates the deploy directory for .rar expansion -->

    252       <resource-deploy path="deploy"/>

    253     </host-default>

    254

    255     <!-- configures a deployment directory for virtual hosts -->

    256     <host-deploy path="hosts">

    257       <host-default>

    258         <resin:import path="host.xml" optional="true"/>

    259       </host-default>

    260     </host-deploy>

    261

    262     <!-- configures the default host, matching any host name -->

    263     <host id="" root-directory=".">

    264       <!--

    265          - configures an explicit root web-app matching the

    266          - webapp's ROOT

    267         -->

    268       <web-app id="/" root-directory="webapps/ROOT"/>

    269

    270       <web-app id="/resin-admin" root-directory="${resin.home}/php/admin">

    271         <!--

    272            - Administration application /resin-admin

    273           -->

    274         <prologue>

    275           <resin:set var="resin_admin_external" value="false"/>

    276           <resin:set var="resin_admin_insecure" value="true"/>

    277         </prologue>

    278       </web-app>

    279     </host>

     

    代替的添加如下内容:

    <!--Create first virtual hosts at 20160112.-->

      <host id="www.peng.cc" root-directory="/application/resin/webapps">

        <host-alias>blog.peng.cc</host-alias>

     

    <!--

      - configures an explicit root web-app matching the

      - webapp's ROOT

      -->

        <web-app id="/" root-directory="/application/resin/webapps/ROOT">

         <session-config cookie-domain="pp.org" reuse-session-id="true">

            <session-timeout>5</session-timeout>

            <session-max>12000</session-max>

             </session-config>

             <servlet-mapping servlet-class='com.caucho.servlets.ResinStatusServlet'>

               <url-pattern>/resin-status-peng.org</url-pattern>

                 <init enable="read"/>

             </servlet-mapping>

                 <error-page error-code='404' location='/tips/404.html'/>

        

         </web-app>

         <web-app id="/resin-admin-peng.org" root-directory="${resin.home}/php/admin">

            <character-encoding>utf8</character-encoding>

            <prologue>

               <resin:set var="resin_admin_external" value="true"/>

               <resin:set var="resin_admin_insecure" value="true"/>

            </prologue> 

            <security-constraint>

              <web-resource-collection>

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

              </web-resource-collection>    

            </security-constraint>

         </web-app>

           <stderr-log path='/app/log/resinlog/www_stderr.log'

                       rollover-period='1W'/>

           <stdout-log path='/app/log/resinlog/www_stdout.log'

                       rollover-period='1W'/>

         </host>

     

     

    <!--Create first virtual hosts at 20160112.-->

      <host id="www.peng.org" root-directory="/application/resin/webapps">

        <host-alias>blog.peng.org</host-alias>

     

    <!--

      - configures an explicit root web-app matching the

      - webapp's ROOT

      -->

        <web-app id="/" root-directory="/application/resin/webapps/peng">

         <session-config cookie-domain="pp.org" reuse-session-id="true">

            <session-timeout>5</session-timeout>

            <session-max>12000</session-max>

             </session-config>

             <servlet-mapping servlet-class='com.caucho.servlets.ResinStatusServlet'>

               <url-pattern>/resin-status-peng.org</url-pattern>

                 <init enable="read"/>

             </servlet-mapping>

                 <error-page error-code='404' location='/tips/404.html'/>

        

         </web-app>

         <web-app id="/resin-admin-peng.org" root-directory="${resin.home}/php/admin">

            <character-encoding>utf8</character-encoding>

            <prologue>

               <resin:set var="resin_admin_external" value="true"/>

               <resin:set var="resin_admin_insecure" value="true"/>

            </prologue> 

            <security-constraint>

              <web-resource-collection>

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

              </web-resource-collection>    

            </security-constraint>

         </web-app>

           <stderr-log path='/app/log/resinlog/blog_stderr.log'

                       rollover-period='1W'/>

           <stdout-log path='/app/log/resinlog/blog_stdout.log'

                       rollover-period='1W'/>

         </host>

     

    注释掉resin主配置中虚拟主机中的http端口内容:

    90      <!-- <http address="*" port="8080"/> -->

    104      <!--  <http address="*" port="8081"/> -->

    启动服务

    [root@data-1-1 ~]# killall java

    [root@data-1-1 ~]# /application/resin/bin/httpd.sh -server peng start

    [root@data-1-1 ~]# /application/resin/bin/httpd.sh -server peng01 start

     

    站点目录下会生成peng的目录:

    [root@data-1-1 ~]# ll /application/resin/webapps/

    drwxr-xr-x  3 root root    4096 Nov 29 16:29 peng

    测试

    [root@data-1-1 ~]# cat /application/resin/webapps/peng/test.jsp

    1+1=<%=1+1%>

    [root@data-1-1 ~]# cat /application/resin/webapps/ROOT/test.jsp

    99+1=<%=99+1%>

     

    修改hosts文件:

    [root@data-1-1 ~]# cat /etc/hosts

    192.168.1.140 www.peng.cc  www.peng.org blog.peng.cc   blog.peng.org

     

    开始测试:

    [root@data-1-1 ~]# curl http://www.peng.cc/test.jsp

    99+1=100

    [root@data-1-1 ~]# curl http://blog.peng.cc/test.jsp

    99+1=100

    [root@data-1-1 ~]# curl http://blog.peng.org/test.jsp 

    1+1=2

    [root@data-1-1 ~]# curl http://www.peng.org/test.jsp

    1+1=2

     

    因为resin主配置文件关掉了80808081端口,所以带端口查看会报错:

    [root@data-1-1 ~]# curl http://blog.peng.org:8080/test.jsp 

    curl: (7) couldn't connect to host

    [root@data-1-1 ~]# curl http://blog.peng.org:8081/test.jsp

    curl: (7) couldn't connect to host

    [root@data-1-1 ~]# curl http://www.peng.org:8081/test.jsp

    curl: (7) couldn't connect to host

    [root@data-1-1 ~]# curl http://www.peng.org:8080/test.jsp

    curl: (7) couldn't connect to host

    理解结构图:

  • 相关阅读:
    没用完的手机流量是否清零?讨论+吐槽
    南方周末:《系统》
    如何将Excel表批量赋值到ArcGIS属性表
    解决4K屏电脑显示问题
    坐标或测量值超出范围
    快速手工实现软件著作权源码60页制作
    SVN版本更新自动通知提醒
    1130不允许连接到MySql server
    Win10中SVN图标不显示的解决
    注意地理坐标系下的距离和面积计算
  • 原文地址:https://www.cnblogs.com/wuhg/p/9706898.html
Copyright © 2011-2022 走看看