整合resin和apache

简介:

为什么要整合resin和apache,已经整合的好处如下:

a.动静分离

b.早起的resin、tomcat的http服务不太好

c.早期的resin、tomcat对rewrite和expire功能不太好

一、安装apache

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@mylinux4 contrib] # 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 gcc gcc-devel gcc-c++ gcc-c++-devel
[root@mylinux4 contrib] # cd /opt/tools/
[root@mylinux4 tools] # tar -zxf httpd-2.2.23.tar.gz 
[root@mylinux4 tools] # cd httpd-2.2.23
[root@mylinux4 httpd-2.2.23] # mkdir /usr/local/apache
[root@mylinux4 httpd-2.2.23] # ./configure --prefix=/usr/local/apache \
> -- enable -deflate \
> -- enable -headers \
> -- enable -modules \
> -- enable -so \
> --with-mpm=worker \
> -- enable -rewrite
[root@mylinux4 httpd-2.2.23] # make && make install

二、为apache编译resin mod_caucho模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@mylinux4 httpd-2.2.23] # cd /opt/tools/resin-3.1.13
[root@mylinux4 resin-3.1.13] # ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@mylinux4 resin-3.1.13] # cd modules/c/src/
[root@mylinux4 src] # make 
[root@mylinux4 src] # make install
[root@mylinux4 src] # ll /usr/local/apache/modules/
total 180
-rw-r--r-- 1 root root   9084 Oct  2 23:42 httpd.exp
-rwxr-xr-x 1 root root 170931 Oct  2 23:51 mod_caucho.so
[root@mylinux4 src] # tail -9 /usr/local/apache/conf/httpd.conf 
#
# mod_caucho Resin Configuration
#
LoadModule caucho_module  /usr/local/apache/modules/mod_caucho .so
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory  /tmp
CauchoStatus  yes
# 上面的配置是编译后产生的
[root@mylinux4 src] # vi /usr/local/apache/conf/httpd.conf 
[root@mylinux4 src] # tail -9 /usr/local/apache/conf/httpd.conf 
#
# mod_caucho Resin Configuration
#
LoadModule caucho_module  /usr/local/apache/modules/mod_caucho .so
ResinConfigServer 192.168.100.182 6911
CauchoConfigCacheDirectory  /tmp
CauchoStatus  yes
# 修改一下resin的地址和端口

三、启动apache服务并测试

1
2
3
[root@mylinux4 src] # /usr/local/apache/bin/apachectl start
httpd: apr_sockaddr_info_get() failed  for  mylinux4.contoso.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1  for  ServerName

wKioL1fxN0PCqR7DAACpd3nN2I0006.jpg-wh_50

1
2
3
4
5
6
7
[root@mylinux4 src] # netstat -lntup|egrep "6911|6921|8080"
tcp        0      0 :::8080                     :::*                        LISTEN      54612 /java          
tcp        0      0 ::ffff:192.168.100.182:6911 :::*                        LISTEN      54612 /java          
tcp        0      0 ::ffff:127.0.0.1:6921       :::*                        LISTEN      54584 /java          
[root@mylinux4 src] # /etc/init.d/resin stop
Stopping resin: .
[root@mylinux4 src] # netstat -lntup|egrep "6911|6921|8080"

wKioL1fxOg-xw0mdAAE1ftN0-gc629.jpg-wh_50

上面的测试结果说明,由apache进行静态内容的展示,而动态内容则交给resin进行解析并返回给apache.

为了更有力的证明这一点,再来做一个测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@mylinux4 ~] # cd /usr/local/apache/htdocs/
[root@mylinux4 htdocs] # echo "99+1=<%=99+1%>" >> test.jsp
[root@mylinux4 htdocs] # ll
total 8
-rw-r--r-- 1 apache apache 44 Nov 21  2004 index.html
-rw-r--r-- 1 apache apache 15 Oct  3 00:51  test .jsp
[root@mylinux4 ~] # cd /usr/local/resin/webapps/ROOT/
[root@mylinux4 ROOT] # echo "Hello,world." >> test.jsp
[root@mylinux4 ROOT] # ll
total 12
-rw-r--r-- 1 root root 1507 Nov  9  2012 index.jsp
-rw-r--r-- 1 root root   13 Oct  3 01:13  test .jsp
drwxr-xr-x 5 root root 4096 Oct  2 21:35 WEB-INF

在apache的根目录/usr/local/apache/htdocs中创建一个test.jsp,内容是“99+1=<%=99+1%>”,并在resin的web目录/usr/local/resin/webapps/ROOT也创建一个test.jsp,内容是“Hello,world.”,在浏览器中打开,看浏览器返回的内容:

wKioL1fxQkLizoQWAACieE-TocA853.jpg-wh_50

返回的内容是resin的web目录中test.jsp中的内容,再一次证明动态内容交给resin进行处理。

四、配置动态和静态内容都交给resin进行处理

[root@mylinux4 src]# tail -9 /usr/local/apache/conf/httpd.conf 

# mod_caucho Resin Configuration

#


LoadModule caucho_module /usr/local/apache/modules/mod_caucho.so


ResinConfigServer 192.168.100.182 6911

SetHandler caucho-request #添加这一行内容

CauchoConfigCacheDirectory /tmp

CauchoStatus yes

[root@mylinux4 src]# /usr/local/apache/bin/apachectl graceful

浏览器访问测试:

wKiom1fxRY3iRfi8AAEgs60rH6A565.jpg-wh_50

可以看到,这是resin的web首页index.jsp的内容。

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

1、在apache中创建一个虚拟主机

[root@mylinux4 src]# tail -21 /usr/local/apache/conf/extra/httpd-vhosts.conf 

<VirtualHost *:80>

    ServerAdmin admin@contoso.com

    DocumentRoot "/var/www/html/mylinux4"

    ServerName www.mylinux4.com

    ServerAlias mylinux4.com

    ErrorLog "logs/www.mylinux4.com-error_log"

    CustomLog "logs/www.mylinux4.com-access_log" common


    <Directory "/var/www/html/mylinux4">

    options -Indexes +FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

    </Directory>

#Resin configuration

ResinConfigServer  192.168.100.182 6911

SetHandler  caucho-request #这里设置虚拟主机将所有请求都转给resin进行解析

</VirtualHost>

2、创建站点目录和主页文件

[root@mylinux4 src]# mkdir /var/www/html/mylinux4

[root@mylinux4 src]# echo "mylinux4 from vhost in apache." >>/var/www/html/mylinux4/index.html

[root@mylinux4 src]# /usr/local/apache/bin/apachectl -t

Syntax OK

[root@mylinux4 src]# /usr/local/apache/bin/apachectl graceful

[root@mylinux4 src]# 

3、修改hosts文件

在hosts文件中添加如下内容:

192.168.100.182  www.mylinux4.com

4、在浏览器中打开

wKioL1fxTY7yf9aQAAEWVR9eSBM336.jpg-wh_50

同样的,在linux上curl一个不存在的页面,将返回如下内容:

[root@mylinux4 src]# curl http://www.mylinux4.com/a.html

<html>

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

<body>

<h1>404 Not Found</h1>

/a.html was not found on this server.

<p /><hr />

<small>

Resin/3.1.13

</small>

</body></html>

上面的内容也说明,该请求是由resin进行处理的。

5、下面将转发给resin的设置注释掉,再进行测试。

<VirtualHost *:80>

    ServerAdmin admin@contoso.com

    DocumentRoot "/var/www/html/mylinux4"

    ServerName www.mylinux4.com

    ServerAlias mylinux4.com

    ErrorLog "logs/www.mylinux4.com-error_log"

    CustomLog "logs/www.mylinux4.com-access_log" common


    <Directory "/var/www/html/mylinux4">

    options -Indexes +FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

    </Directory>

#Resin configuration

#ResinConfigServer  192.168.100.182 6911

#SetHandler  caucho-request

</VirtualHost>

[root@mylinux4 src]# /usr/local/apache/bin/apachectl graceful

wKiom1fxTvLBi0XsAACxGf8WJps309.jpg-wh_50

同样的,curl一个不存在的页面,出现的结果如下:

[root@mylinux4 src]# curl http://www.mylinux4.com/a.html

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

<html><head>

<title>404 Not Found</title>

</head><body>

<h1>Not Found</h1>

<p>The requested URL /a.html was not found on this server.</p>

</body></html>

这里并没有转发给resin。

六、resin配置多个虚拟主机

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<server  id = 'test'  address= '192.168.100.182'  port= '6911'  watchdog-port= "6921" >
       <http address= "*"  port= "8080"  />
  <jvm-arg>-Xmx256m< /jvm-arg >
  <jvm-arg>-Xss1m< /jvm-arg >
  <jvm-arg>-Xdebug< /jvm-arg >
  <jvm-arg>-Dcom.sun.management.jmxremote< /jvm-arg >
  <memory- free -min>1M< /memory-free-min >
  <thread-max>256< /thread-max >
  <socket-timeout>65s< /socket-timeout >
  <keepalive-max>128< /keepalive-max >
  <keepalive-timeout>15s< /keepalive-timeout >
     < /server >
     <server  id = 'demo'  address= '192.168.100.182'  port= '6912'  watchdog-port= "6922" >
       <http address= "*"  port= "8081"  />
  <jvm-arg>-Xmx256m< /jvm-arg >
  <jvm-arg>-Xss1m< /jvm-arg >
  <jvm-arg>-Xdebug< /jvm-arg >
  <jvm-arg>-Dcom.sun.management.jmxremote< /jvm-arg >
  <memory- free -min>1M< /memory-free-min >
  <thread-max>256< /thread-max >
  <socket-timeout>65s< /socket-timeout >
  <keepalive-max>128< /keepalive-max >
  <keepalive-timeout>15s< /keepalive-timeout >
     < /server >

七、配置resin多站点目录

把host-default 模块删除,添加下面的内容。在对应的位置添加

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!--create first vhost demo1 -->
   
  <host  id = "demo1"  root-directory= "/usr/local/resin/webapps" >
  <host- alias >www.demo1.org< /host-alias >
   
        <!--
           - configures an explicit root web-app matching the
           - webapp's ROOT
          -->
        <web-app  id = "/"  root-directory= "/usr/local/resin/webapps/demo1" >
                           <session-config cookie-domain= "www.demo1.com"  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-www .demo1.com< /url-pattern >
                                  <init  enable = "read" />
                           < /servlet-mapping >
                               <error-page  error-code= '404'  location= '/tips/404.html' />
          < /web-app >
          <web-app  id = "/resin-admin-www.demo1.com"  root-directory= "${resin.home}/php/admin" >
                  <character-encoding>utf-8< /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= '/var/log/resinlog/demo1_stderr.log'      rollover-period= '1W' />
                  <stdout-log path= '/var/log/resinlog/demo1_stdoutr.log'     rollover-period= '1W' />
   
  < /host >
  <!--  ########################################################################## -->
  <!--create second vhost demo2 -->
   
  <host  id = "demo2"  root-directory= "/usr/local/resin/webapps" >
  <host- alias >www.demo2.com< /host-alias >
   
        <!--
           - configures an explicit root web-app matching the
           - webapp's ROOT
          -->
        <web-app  id = "/"  root-directory= "/usr/local/resin/webapps/demo2" >
                           <session-config cookie-domain= "www.demo2.com"  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-www .demo2.com< /url-pattern >
                                  <init  enable = "read" />
                           < /servlet-mapping >
                               <error-page  error-code= '404'  location= '/tips/404.html' />
          < /web-app >
          <web-app  id = "/resin-admin-www.demo2.com"  root-directory= "${resin.home}/php/admin" >
                  <character-encoding>utf-8< /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= '/var/log/resinlog/demo2_stderr.log'      rollover-period= '1W' />
                  <stdout-log path= '/var/log/resinlog/demo2_stdoutr.log'     rollover-period= '1W' />
   
  < /host >

八、错误优雅显示

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

九、修改resin的默认日志配置

resin的默认日志设置格式为:

 

1
2
<log name= ""  level= "info"  path= "stdout:"
        timestamp= "[%H:%M:%S.%s] {%{thread}} " />

一般我们采用下面的方式记录日志(记录每一天的日志):

     

1
2
<stderr-log path= '/var/log/resinlog/demo1_stderr.log'      rollover-period= '1D' />
<stdout-log path= '/var/log/resinlog/demo1_stdoutr.log'     rollover-period= '1D' />

而resin日志内容的格式为:

     

1
2
3
<access-log path= "logs/access.log"
             format = '%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
             rollover-period= "1W" />

我们也对此进行修改,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<access-log path= "/var/log/resinlog/access.log"
            archive- format = "access-%Y%m%d.log.gz"
            format = '%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
            rollover-size= "10mb"
            rollover-period= "1D" />
<stdout-log path= "/var/log/resinlog/stdout.log"
            archive- format = "stdout-%Y%m%d.log.gz"
            timestamp= "[%Y.%m.%d %H:%M:%S.%s]"
            rollover-size= "10mb"
            rollover-period= "1D" />
<stderr-log path= "/var/log/resinlog/stderr.log"
            archive- format = "stderr-%Y%m%d.log.gz"
            timestamp= "[%Y.%m.%d %H:%M:%S.%s]"
            rollover-size= "10mb"
            rollover-period= "1D" />



本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1858515,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 Java 应用服务中间件
玩转Apache Tomcat
玩转Apache Tomcat
27 0
|
存储 缓存 前端开发
Tomcat-Catalina为什么不new出来
Tomcat-Catalina为什么不new出来
Tomcat-Catalina为什么不new出来
|
Web App开发 网络协议 Java
|
网络协议 Java 应用服务中间件
|
Java 应用服务中间件 Apache
|
Java Apache
|
Java 应用服务中间件 Apache
|
Java 应用服务中间件 Apache
|
Java 应用服务中间件 Apache
|
网络协议 Java 应用服务中间件