apache 整合tomcat环境搭建 +ssl协议 (终结版)

本文详细介绍了如何整合Apache与Tomcat,包括设置环境变量、Apache配置、Tomcat配置以及SSL协议的启用。在配置过程中,作者分享了遇到的问题及解决方案,如定义主机名、配置mod_jk.so、修改server.xml和设置环境变量。此外,还提到了SSL证书的制作方法。
摘要由CSDN通过智能技术生成

重点内容这些天一直在弄这个环境变量终于弄好了 简直坑啊
之前也写了一个 做了一些具体的说明这里就不说了 不过有点小碧油鸡 所以重写一下 看这个的时候没有注释的地方可以参考下
http://blog.csdn.net/u011685720/article/details/48437677
其实我就是偷懒不想重写下啦啦啦啦啦啦
———————-我是卖萌的分割线

1.软件版本

apache-tomcat-7.0.64
ActivePerl_5.16.2.3010812913
Apache_HTTP_Server_2.4.12_JiSuXia
Win64OpenSSL-1_0_0s
jdk-7u79-windows-i586

perl的话可能会有一些命令类库要用到 或者还有vc2008 其实都是在输入命令不存在或者是各种dll错误的

2.apache配置

首先定义一个本机的主机名 timoRun 然后来加一个域名作为servername使用timoRun.com.cn

于是httpd.conf中的配置文件就可以这样写

@主机名 监听80端口 当然这个是全家的变量
ServerName auth-server.master.nttdata.co.jp:80 

这是文件地址的配置

@有错误时email这个地址 基本不用
ServerAdmin admin@auth-server.master.nttdata.co.jp.com

@这个地址是apache发布web工程的文件夹  把他指向tomcat下的web工程文件夹
DocumentRoot "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\webapps"

@这个是对于文件目录的各种请求的全局权限 在设立虚拟主机时会用到
<Directory "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\webapps">
    Options Indexes FollowSymLinks
    AllowOverride all
    @允许各种请求 具体可以看文档说明
    Require all granted  
</Directory>

这里有一个很好玩的地方

<Directory />
    AllowOverride none
    Require all denied
</Directory>

根据apache文档的说明

说明        封装一组指令,使之仅对文件空间中的某个目录及其子目录生效
语法        <Directory directory-path> ... </Directory>
作用域        server config, virtual host
状态        核心(C)
模块        core

说明
<Directory>和</Directory>用于封装一组指令,使之仅对某个目录及其子目
录生效。任何可以在"directory"作用域中使用的指令都可以使用。

Directory-path可以是一个目录的完整路径,或是包含了Unix shell匹配语
法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配
任何字符序列。您也可以使用"[]"来确定字符范围。以上通配符都不能匹
配"/"字符。所以 “<Directory /*/public_html>”将无法匹
配/home/user/public_html ,但<Directory /home/*/public_html>能
够正确匹配。比如说:

<Directory "/usr/local/httpd/htdocs">
Options Indexes FollowSymLinks
</Directory>

使用directory-path参数的时候要注意:它们必须与Apache用于访问文件的文件
系统路径保持一致。赋予特定<Directory>的指令将无法对通过不同路径指向的同
一个目录文件生效,比如说通过另外一个符号连接生成的路径。

扩展的正则表达式也可以通过附加一个"~"字符来使用。比如说:

<Directory ~ "^/www/(.+/)*[0-9]{3}">

将匹配/www/下所有由3个数字组成的目录。

如果那么说不明白 说白了就是圈起来一块代码块 然后对代码块生效各种配
置属性

于是那么问题来 当几个这样的 <Directory></Directory>重复出现 同
时之间所圈定的目录有交叉或者没有交叉的情况如何做呢

于是有下面的操作


如果有多个(非正则表达式)<Directory>配置段符合包含某文档的目录(或其父目
录),那么指令将以短目录优先的规则进行应用。并包含.htaccess文件中的指令。
比如说在

<Directory />
AllowOverride None
</Directory>

<Directory "/home/">
AllowOverride FileInfo
</Directory>

中,访问文档/home/web/dir/doc.html的步骤如下:

    * 应用指令AllowOverride None(禁用.htaccess文件)。
    * 应用指令AllowOverride FileInfo(针对/home目录)。
    * 按顺序应用所有/home/.htaccess 、/home/web/.htaccess 、/home/web/dir/.htaccess中的FileInfo组指令。

正则表达式将在所有普通配置段之后予以考虑。所有的正则表达式将根据它们出现在
配置文件中的顺序进行应用。比如说,以下配置:

<Directory ~ abc$>
# ......
</Directory>

正则表达式配置段将在所有普通的<Directory>和.htaccess文件应用之后才予以
考虑。所以正则表达式将匹配/home/abc/public_html/abc并予以应用。

请注意:Apache对<Directory />的默认访问权限为"Allow from All"。这意
味着Apache将伺服任何通过URL映射的文件。我们建议您将这个配置做如下屏蔽:

<Directory />
Order Deny,Allow
Deny from All
</Directory>

然后在您想要使之被访问的目录中覆盖此配置。参阅安全提示以获取更多详情。

一般来说<Directory>指令只会出现在httpd.conf文件中,但它们也可能出现在
任何其它配置文件中。<Directory>指令不可被嵌套使用,也不能出现在<Limit>
或<LimitExcept>配置段中。

所以在httpd.conf下可以看到默认有两个这样的代码块

<Directory />
    AllowOverride none
    Require all denied
</Directory>

//和

<Directory "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\webapps">
    Options Indexes FollowSymLinks
    Options Indexes FollowSymLinks
    Require all granted  
</Directory>

//那么上述的顺序就是先全局否定一切连接请求 之后再在webapps下设定可以请求
与否的权限

//于是可以这样设置一个小技巧

@否定一切请求
<Directory "/var/www/html/secret">
    AllowOverride none
    Require all denied
</Directory>

@在httpd-ssl中设置那些请求通过加密访问 那些只是通过普通的80端口访问
<Directory "/var/www/html/secret">
      Allow from  ALL
</Directory>

//弄清楚了这个关键配置之后似乎调教httpd.conf有点意思了

这之后再来配置连接tomcat的mod_jk.so 至于怎么放置看上一篇 这里只是总结一下 这个本来就是笔记

LoadModule jk_module modules/mod_jk.so

JKWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log



<VirtualHost *>
@这里有一个很有意思的地方  就是<VirtualHost *>我写成了
<VirtualHost auth-server.master.nttdata.co.jp :80>或者
<VirtualHost *:80> 这样其实在hosts中绑定域名之后都是可以的 但是在其他
电脑访问这台主机的时候localhost加密却是访问apache manager的根目录 所
以暂时没有好的解决办法的情况下  还是中规中矩的写吧

ServerName  auth-server.master.nttdata.co.jp

DocumentRoot  "C:/Program Files (x86)/Apache Software Foundation/Tomcat 7.0/webapps"

DirectoryIndex index.html index.htm index.jsp index.action

ErrorLog logs/shsc-error_log.txt

CustomLog logs/shsc-access_log.txt common

 @当然有强迫症的孩子可以这样定义文档输出格式
-------------- ----------  
 LogFormat "{method:\"%m\",state:\"%s\",protocol:\"%H\",url:\"%U\",time:\
Agent}i\",query:\"%q\",refer:\"%{Referer}i\",server:\"%V\"}" 
seo 
CustomLog "|/usr/sbin/rotatelogs logs/seo_%Y%m%d.log 86400 480" seo
</VirtualHost>
------------------------ 

JkMount /*WEB-INF tomcat

JkMount /*j_spring_security_check tomcat

JkMount /*.action tomcat

JkMount /servlet/* tomcat

JkMount /*.jsp tomcat

JkMount /*.do tomcat

JkMount /*.action tomcat

JkMount /jkstatus status

JkMount /*.servlet tomcat

@其实关键在这里  这里有一个小问题 就是当apache指向tomcat的默认界面之后
不会解析jsp页面的图片  那么就把这些图片一起交给tomcat好了  当然也许会有
更好的方法 只是我现在还没有发现 先这么写吧   同时要注意这里和
DocumentRoot所代表的地址构成的相对路径
JkMount /*.gif tomcat  
JkMount /*.jpg tomcat
JkMount /*.png tomcat
JkMount /*.css tomcat
JkMount /*.js tomcat
JkMount /*.htm tomcat
JkMount /*.html tomcat
</VirtualHost>

接下来是mod_jk.so的配置文件 上面只是提到了加载那个模块以及模块的配置文件在哪 其实向上述的虚拟主机设置可以单独建一个例如system.conf 然后使用include命令来加载 具体的可以百度下 只是我觉得那样很烦人 没有那么处理 同时还有一点就是下面这个配置文件放在tomcat下或者apache下都没有问题 只要你在配置文件中将它的位置说明就可以了

把这个配置文件定义为workers.properties

workers.tomcat_home=C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0
workers.java_home=C:\Program Files (x86)\Java\jre7
ps=/

worker.list=tomcat 
worker.tomcat.type=ajp13    //这个ajp13 是协议不要弄错了
worker.tomcat.host=localhost   
worker.tomcat.port=8009  
worker.tomcat.socket_keepalive=1   
worker.tomcat.socket_timeout=300   
worker.tomcat.lbfactor=1


worker.list = status
worker.status.type=status

//在上面里面多添加了几句话 应用到的是如下的模块 这个是apache自己的jkstatus的模块 用来监听各个服务器和端口的

//workers.properties 配置文件中加入 下面两行

worker.list = status
worker.status.type=status
//mod_jk.conf 配置文件中加入下面一行

JkMount /jkstatus status


//之后http://localhost/jkstatus 就可以访问了

//当然这个是没有密码访问的情况的  如果受虐心态比较重 你也可以这样来加密

//如下三种方法

//1 禁制其他访问,只限制部分ip的访问

//通过一下设置,注意别写反了,关于deny和allow见http://www.blogjava.net/freeman1984/archive/2011/10/31/362372.html
<Location /jkstatus>
Order deny,allow
Deny from all
Allow from 某个ip
</Location>
//或者全部不让访问
<Location /jkstatus>
Order deny,allow
Deny from all
</Location>
//2 不在worker里面配置status的worker。这样有可能默认交给了tomcat处
//理,最后也许看到的就是可爱的404界面。
//3 添加密码通过配置(有几种方式,basic,digest 其他?),这个就basic介
//绍一下
<Location /jkstatus>
Order deny,allow
AuthType Basic
AuthName “验证中心”  #弹出框的提示
AuthUserFile conf/jk_passwd
require valid-user
</Location>

//生成密码文件的方式如下(以windows为例:htpasswd -bc 文件路径 用户名 密码):

d:\Apache2.4\bin>htpasswd -bc "d:\Apache2.4\conf\jk_passwd" name passwd

//然后生成d:\Apache2.4\conf\jk_passwd这个密码文件

3.tomcat的配置文件

其实到上面的地方已经完成了 但是如果还有很多各种小bug 那么加点多余的东西也许可以

环境变量配置 CATALINA_BASE D:\Apache2.4
CATALINA_HOME D:\Apache2.4
CLASS_PATH %CATALINA_HOME%\lib\servlet-api.jar
恩 这里也有一个很好玩的地方

C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\conf
下的server.xml文件 最后结尾添加上这句话 这句话的意思就是不在默认跳
转tomcat 的默认界面而是直接跳转apache下的htdoc文件夹

<Context docBase="C:\Apache24\htdocs" crossContext="true" path="" reloadable="true" /> 

4.ssl 协议

先来说配置文件

httpd.conf 下 取消注释LoadModule ssl_module modules/mod_ssl.so

和这句Include conf/extra/httpd-ssl.conf

下面的放置私钥和证明书的地方

SSLCertificateFile "D:/tools/httpd/cert/server.crt" 
SSLCertificateKeyFile "D:/tools/httpd/cert/server.key"

C:\Apache24\conf\extra httpd-ssl.conf

Listen auth-server.master.nttdata.co.jp:443

-----------------------
<VirtualHost _default_:443> // 因为如果在这
//写了servername和端口  下面的servername和端口是不用重复写的
 General setup for the virtual host
DocumentRoot "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\webapps"
ServerName auth-server.master.nttdata.co.jp:443
ServerAdmin admin@auth-server.master.nttdata.co.jp.com
--------------------------

上面哪里是最开始的地方 但是我忽略的这个也是个虚拟机 重新处理之后如下

---------------------------
<VirtualHost auth-server.master.nttdata.co.jp:443>
DocumentRoot "C:\Program Files (x86)\Apache Software 
Foundation\Tomcat 7.0\webapps"
#ServerName auth-server.master.nttdata.co.jp
ServerAdmin admin@auth-server.master.nttdata.co.jp.com
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"
SSLEngine on

//重点的是下面

DirectoryIndex index.html index.htm index.jsp index.action

JkMount /*WEB-INF tomcat

JkMount /*j_spring_security_check tomcat

JkMount /*.action tomcat

JkMount /servlet/* tomcat

JkMount /*.jsp tomcat

JkMount /*.do tomcat

JkMount /*.action tomcat

JkMount /jkstatus status

JkMount /*.servlet tomcat

JkMount /*.gif tomcat
JkMount /*.jpg tomcat
JkMount /*.png tomcat
JkMount /*.css tomcat
JkMount /*.js tomcat
JkMount /*.htm tomcat
JkMount /*.html tomcat

加入上述语句就完美解决了https进入默认的变态猫界面会是根目录了 因为  之前根本没有处理!
--------------------------

以上配置就完了

下面是制作方法
http://blog.csdn.net/u011685720/article/details/48347099

虽然我们安装了openssl 但是在apache2.4下已经兼容了openssl 所以直接在cmd界面下进入apache的bin目录来执行各种代码就好了 以为我发现也可以为tomcat添加ssl协议已经制作专门登陆用的ssl界面 其他的界面则是通过普通的url方法 所以这里偷个懒 等那个整合到一起之后再写吧 其实写了也没人看 啦啦啦啦啦

附录一下host修改

172.16.170.203(虚拟机ip)         vim-ap.ccav.co.jp  web-server.ccav.co.jp  auth-server.slave.ccav.co.jp  auth-server.master.ccav.co.jp 
127.0.0.1      auth-server.ccav.co.jp  auth-server


-----------
(实体主机的hosts)
127.0.0.1       localhost 
172.16.170.203   vim-ap.ccav.co.jp  web-server.ccav.co.jp  auth-server.slave.ccav.co.jp  auth-server.master.ccav.co.jp 


其实本机ip  localhost  域名什么的   都是一个东西   
如下

localhost           域名                      主机名
127.0.0.1      auth-server.ccav.co.jp  auth-server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值