• [转]Win2K下Apache2+TomCat5.0整合解决方案


    操作系统:windows 2000 professional 中文版+sp4
    java 环境:j2sdk1.4.2_01 JAVA_HOME= C:\j2sdk1.4.2_01
    apache 2.0.48 for win32:apache_2.0.48-win32-x86-no_ssl.msi下载地址
    http://archive.apache.org/dist/httpd/
    tomcat 5.0.16 for win32:jakarta-tomcat-5.0.16.exe下载地址
    http://jakarta.apache.org/site/binindex.cgi
    jk2 模块 for win32: mod_jk2-2.0.43.dll 下载地址
    http://apache.scarlet.be/jakarta/tomcat-connectors/jk2/binaries/win32/
    以上软件的下载网址:http://www.apache.org
    1.    安装并测试Apache和TomCat5.0;
    注意事项: Apache默认端口为80,与IIS冲突,更改端口或关闭IIS,
    TomCat安装完后配置环境变量。
    2.    开始整合;
    首先,将文件mod_jk2.so 复制到Apache 的模块目录(%Apache%\Apache2\modules)中。
    备份Tomcat 和Apache 的缺省配置文件,以防不测。
    其次,编辑配置文件。具体的配置文件有四个,
    它们分别是:httpd.conf、jk2.properties、server.xml、workers2.properties。

    a、 修改ApacheRoot\Apache2\conf\httpd.conf 文件
    1>修改web 主目录,即将
    DocumentRoot "D:/websrv/Apache2/htdocs" 改为自己的web主目录
    eg:     DocumentRoot    "D:/websrv/myweb"
    2>修改web 主目录对应的目录,即将
    <Directory "D:/websrv/Apache2/htdocs">改为
    eg:     <Directory "D:/websrv/myweb" >
    此目录块要与DocumentRoot的路径对应,块中的语法是对此块对应Web主目录的操作权限设置。
    3>修改目录缺省的web 文件,即将
    DirectoryIndex index.html index.html.var 改为
    eg:      DirectoryIndex index.html index.html.var index.jsp
    语法说明:当向Apache 发出请求时容器将顺次去找index.html,如果没有,将接着找index.htm,最后找index.jsp。
    4>修改cgi-bin 所在目录,即将
    ScriptAlias /cgi-bin/ "D:/websrv/Apache2/cgi-bin/"改为
    ScriptAlias /cgi-bin/ "D:/websrv/myweb/cgi-bin/"
    <Directory "D:/websrv/Apache2/cgi-bin"> 改为
    <Directory "D:/websrv/myweb/cgi-bin">
    如果程序中需要用到cgi时修改以上两处。
    5>添加指定的虚拟目录(别名),及其对应目录的属性
    #这是测试用的文件夹,能执行jsp 文件。
    Alias  /jj/           "D:/websrv/myweb/jj/"
    <Directory       "D:/websrv/myweb/jj" >
    AllowOverride None
    Options IncludesNoExec
    AddOutputFilter Includes html
    AddHandler type-map var
    Order allow,deny
    Allow from all
    </Directory>

         Alias  /chengxin/     "D:/websrv/myweb/chengxin/"
         <Directory              "D:/websrv/myweb/chengxin" >
            AllowOverride None
           Options IncludesNoExec
            AddOutputFilter Includes html
            AddHandler type-map var
            Order allow,deny
           Allow from all
         </Directory>
    #在web主目录myweb中添加了两个测试应用程序jj和chengxin
    语法说明:
     
          Alias  /web程序别名/     "程序根目录/"                            ##别忘啦最后有/
          <Directory              "程序根目录" >
            AllowOverride None
            Options IncludesNoExec
            AddOutputFilter Includes html                           对此程序的具体操作权限设置    
            AddHandler type-map var                                   
            Order allow,deny
           Allow from all
    </Directory>
    注意:
                       程序根目录必须和%Tomcat5%\conf\server.xml中配置的虚拟目录相吻合。
               6>修改缺省的字符集,使之支持中文,即将
    AddDefaultCharset ISO-8859-1 改为
    AddDefaultCharset GB2312
                7>在文件最后添加如下内容,以加载jk2 模块
    <IfModule !mod_jk2.c>
    LoadModule jk2_module modules/mod_jk2.so
    </IfModule>

    b、 修改Tomcat5Root\conf\jk2.properties 文件
    在文件最后添加如下内容,打开shm 文件设置
    #Shared memory directive
    shm.file=ApacheRoot/Apache2/logs/jk2.shm
    可以在ApacheRoot/Apache2/logs/下新建jk2.shm文件
    c、 修改Tomcat5Root\conf\server.xml 文件
    在apache 中对应指定的虚拟目录,server.xml 中也应指定,所以在
      <!-- Tomcat Root Context -->
    <!--
    <Context path="" docBase="ROOT" debug="0">
    -->
    的下面添加
    <Context path="/jj" docBase="d:\websrv\myweb\jj" debug="0" reloadable="true"
    crossContext="true"></Context>
    <Context path="/chengxin" docBase="d:\websrv\myweb\chengxin" debug="0" reloadable="true"
    crossContext="true"></Context>




    d、 修改ApacheRoot\Apache2\conf\workers2.properties 文件
    注意:如果此文件不存在,则在目录ApacheRoot \Apache2\conf 下新建一个。
    添加如下内容
    #***************************************************************************
    # only at beginnin. In production uncomment it out 必须在文件开头定义
    [logger.apache2]
    level=DEBUG
    #define the shared memory file 定义shm 文件
    [shm]
    file=ApacheRoot /Apache2/logs/jk2.shm    #指向Apache文件下的logs/jk2.shm文件
    size=1048576
    # Define the communication channel 定义信道
    [channel.socket:localhost :8009]
    tomcatId=localhost :8009
    # define the worker
    [ajp13:localhost:8009]
    channel=channel.socket:localhost:8009
    #jk2 的状况,可通过
    http://localhost/status 查看
    [status:]
    info=Status worker, displays runtime information
    channel=channel.socket:localhost:8009
    # Uri mapping Uri 映射
    #[uri:/path/*]会把
    http://域名/path/里的所有请求发给tomcat。
    #而[uri:/path/*.jsp]会把http://域名/path 里的jsp 文件请求发给tomcat 处理。
    #此path 可以是apache 的虚拟目录,也可以是tomcat 的虚拟目录,
    #还可以是tomcat 的物理目录,这儿是配置jk2 的关键,试试就知道了。
    [uri:/status/*]
    worker=status:localhost:8009
    group=status:
    #[uri:/*]                ###表示web主目录下的所有请求都给TomCat处理
    [uri:/jj/*.jsp]    ###表示web主目录下的jj程序中所有jsp文件请求都给TomCat处理
    [uri:/chengxin/*]     ###表示web主目录下的changxin程序中所有请求都给TomCat处理
    #[uri:/jsp/*.jsp]
    worker=ajp13:localhost:8009
    info=Map the whole webapp
    注意:此文件中的8009端口设置必须与TomCatRoot\conf\server.xml文件中
           <Connector port="8009" 
                   enableLookups="false" redirectPort="8443" debug="0"
    protocol="AJP/1.3" />
    对应。
    到此已基本配置完成。

    如果要通过配置虚拟主机的方法来访问还要进行以下配置:
     以下配置的是一个IP对应多个域名的方法。
    1>    在apacheRoot\apache2\conf\httpd.conf修改
                Listen   80                                     #监听端口为80
    #NameVirtualHost  *:80 为
    NameVirtualHost 192.168.1.208:80
    ##################################Ip影射到程序主目
    <VirtualHost 192.168.1.208:80>
    #管理员Email
        ServerAdmin        webmaster@dummy-host.example.com
        #jj  web程序目录
    DocumentRoot    d:/websrv/myweb/jj
    #域名 
       ServerName         ccjg.test.com
      #日志
     ErrorLog          logs/dummy-host.example.com-error_log
        CustomLog       logs/dummy-host.example.com-access_log common
    #多个域名对应一个程序是可以在此添加
    ServerAlias   ccjg.test.gov.cn
    #注意:
    #每在ServerName或ServerAlias添加一个域名时相应的就应该在
    #TomcatRoot\conf\server.xml文件中添加相应的<Host>块标记与之对应
    #如果要在本机测试则在C:\WINNT\system32\drivers\etc\hosts须添加相应
    #的IP对应于你的所设置域名,域名解析时用到
    #eg:   192.168.1.208         ccjg.test.gov.cn
    #           192.168.1.208         ccjg.test.com   
    </VirtualHost>

    <VirtualHost    192.168.1.208:80>
        ServerAdmin        webmaster@dummy-host.example.com
    #chengxin  web程序目录
        DocumentRoot       d:/websrv/myweb/chengxin
        ServerName           chengxin.test.com
        ErrorLog                logs/dummy-host.example.com-error_log
        CustomLog             logs/dummy-host.example.com-access_log common
    ServerAlias           ccjg.test.gov.cn
    </VirtualHost>
    以上是一个IP对应两个web程序。
    2>    在TomCatRoot\conf\server.xml中添加对应的<Host>块
           <Host name="ccjg.test.com" debug="0" 
             appBase="d:/websrv/jj" 
             unpackWARs="true" autoDeploy="true"> 
            <Context path="" docBase="" debug="0"/> 
            <logger className="org.apache.catalina.logger.FileLogger" 
            directory="logs" prefix="cust1_log." suffix=".txt" 
            timestamp="true"/> 
    </Host> 
    <Host name="ccjg.test.gov.cn" debug="0" 
             appBase="d:/websrv/jj" 
             unpackWARs="true" autoDeploy="true"> 
            <Context path="" docBase="" debug="0"/> 
            <logger className="org.apache.catalina.logger.FileLogger" 
            directory="logs" prefix="cust1_log." suffix=".txt" 
            timestamp="true"/> 
            </Host>
    到此OK

    1. 配置Tomcat数据连接池
    Tomcat连接池的配置请参照我的另一篇文章《如何连接SQL Server数据库(Java版)》,上面讲得很详细,driverClassName是指数据驱动,url是指数据库连接字符串(比如jTDs的driverClassName应该是"net.sourceforge.jtds.jdbc.Driver",url应该是"jdbc:jtds:sqlserver://192.168.1.32:1433/dbname"),其中还有几个参数maxActive、maxWait、maxIdle要根据你的应用情况去寻找最优配置。


    2. 整合Apache2.55与Tomcat服务器
    其实Blog上也有转载的文章,这里就重点讲述我配置成功的过程吧,前期准备工作:
    去Apache官方网站下载Apache2.55和mod_jk-apache-2.0.55.so(下载后改名为mod_jk.so),Apache的优点就是扩展性非常好,mod_jk.so是它的扩展模块,一定要注意版本匹配问 题,然后修改httpd.conf文件,在文件最后加上如下代码(C:/Apache/Apache2为我的Apache安装目录,注意作相应更改):
    #Notice it can't use LoadModule jk2_module modules/mod_jk.so
    LoadModule jk_module modules/mod_jk.so

    #Where to find workers.properties
    JkWorkersFile "C:/Apache/Apache2/conf/work.properties"

    #where to put jk logs
    JkLogFile "C:/Apache/Apache2/logs/mod_jk.log"

    #Set jk log level[debug/error/info]
    JkLogLevel info

    #Select the log format
    JkLogStampFormat "[%a %b %d %H:%m:%s %y]"

    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

    JkRequestLogFormat "%w %V %T"

    JkMount /application/* loadbalancer

    JkMountFile "C:/Apache/Apache2/conf/uriworkermap.properties"

    JkShmFile   "C:/Apache/Apache2/logs/jk.shm"

    <Location /jkstatus>
     JkMount status
     Order deny,allow
     Deny from all
     Allow from 127.0.0.1
    </Location>
    再在Apache的conf目录下(也就是httpd.conf所在的目录)新建配置中的两个文件work.properties和uriworkermap.properties,另外在日志logs目录中新建一个jk.shm空文件,文件内容如下:
    work.properties文件添加如下内容,其中(worker.node1.port=8009中的8009对应着Tomcat的默认Servlet监听端口):
    worker.list=loadbalancer,status
    worker.node1.port=8009
    worker.node1.host=Rick.com
    worker.node1.type=ajp13   
    worder.node1.lbfactor=1
    worker.node1.cachesize=10
    worker.node2.port=8009
    worker.node1.host=localhost
    worker.node1.type=ajp13
    worder.node1.lbfactor=1
    worker.node1.cachesize=10
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=node1,node2
    worker.loadbalancer.sticky_session=1
    worker.status.type=status
    uriworkermap.properties文件添加如下内容:
    /jmx-console=loadbalancer
    /jmx-console/*=loadbalancer
    /web-console=loadbalancer
    /web-console/*=loadbalancer
    /*.jsp=loadbalancer
    /*.do=loadbalancer
    /*=loadbalancer
    至于这些内容的解释和说明,网上搜索会有几大箩框,就不再赘述了,至此,Apache与Tomcat的整合已完成


    3. 如何使用Tomcat后台管理及账户设置
    去Apache官方网站上同时下载apache-tomcat-5.5.17.zip和apache-tomcat-5.5.17-admin.zip两 个zip文件,将两个文件解压到同一目录(如:D:\tomcat),打开Tomcat根目录中conf目录下的tomcat-users.xml文件, 加入如下内容(role为角色,user为账号密码):
      <role rolename="manager"/>
      <role rolename="admin"/>
      <user username="admin" password="admin" roles="admin,manager"/>
    保存,然后重新启动Tomcat,假设Tomcat端口为8080(默认),输入
    http://127.0.0.1:8080/admin                        进入Tomcat的管理界面
    http://127.0.0.1:8080/manager/html          进入Tomcat的Web工程发布管理界面
    apache-tomcat-5.5.17.zip为Tomcat文件 
    apache-tomcat-5.5.17-admin.zip为Tomcat的后台管理程序
    conf/tomcat-users.xml为Tomcat的账号权限配置管理文件


    4. Tomcat多端口访问设置
    打开conf/server.xml文件,在</Server>前面加入如下代码:
      <Service name="Webport">

        <Connector port="9090" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="9443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" />

        <Connector port="9009"
                   enableLookups="false" redirectPort="9443" protocol="AJP/1.3" />
       
        <Engine name="Webport" defaultHost="localhost">

          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 resourceName="UserDatabase"/>

          <Host name="localhost" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="D:/eclipse/work/WebSystem/WebRoot" debug="0"/>
          </Host>

        </Engine>

      </Service>
    第一个9090就是Web端口,第二个9009就是监听端口,也就是Apache与Tomcat整合时要配置的那个Servlet监听端口<Context path="" docBase="D:/eclipse/work/WebSystem/WebRoot" debug="0"/>的内容就不说了,这里我配置了一个默认的外部目录,也就是http://127.0.0.1:9090所访问到的一个目录, 当然,你可以在此配置其它子目录。
    当然,如果你的工程直接放在Tomcat的webapps目录下,Tomcat会自动在对应的conf/对应的目录/localhost/下建立一个与工程目录同名的xml文件,如果你要在9090端口里配置外部<Context...>的内容,可以去tomcat的conf目录下建立如下的目录结构Webport\localhost(对应的可以参照Tomcat默认的Catalina\localhost目录结构),然后在新建的Webport\localhost目录下可以建立若干个与网站发布工程同名的xml文件,例如:
    <Context path="myweb" docBase="D:/eclipse/work/WebSystem/Myweb" debug="0"/>
    对应着的myweb.xml文件内容为:
    <Context docBase="D:/eclipse/work/WebSystem/Myweb"
             privileged="true" antiResourceLocking="false" antiJARLocking="false" debug="0">

    </Context>
    访问路径为:http://127.0.0.1:9090/myweb
  • 相关阅读:
    浅析Vue CompositionAPI和React Hooks对比:hook的意义、两者差别(原理链表/Proxy、代码执行每次渲染都执行/组件创建时运行、声明响应式状态、如何跟踪依赖、生命周期、自定义hook、Ref获取元素、计算属性附加函数、Context和provide/inject、在渲染上下文中暴露值)
    算法设计和数据结构学习_1(一道堆排序作业题)
    总结系列_14(OpenCV2.4.3的新特征以及安装方法)
    Kinect+OpenNI学习笔记之8(Robert Walter手部提取代码的分析)
    基础学习笔记之opencv(21):一个简单有趣的皮肤检测代码
    基础学习笔记之opencv(16):grabcut使用例程
    Eigen初步1:初步体验Eigen库
    基础学习笔记之opencv(19):有关图像序列的直方图计算
    基础学习笔记之opencv(17):皮肤检测类CvAdaptiveSkinDetector的使用
    ChaLearn Gesture Challenge_4:one shot learning比赛结果简单分析
  • 原文地址:https://www.cnblogs.com/jamin/p/1225123.html
Copyright © 2020-2023  润新知