apache多域名转发至tomcat&https设置&虚拟主机的设置

最近忙于工作中的apache+tomcat的多域名转发,一个看起来非常简单的工作,实际做起来并没有想象中那么容易。为了将来的工作方便,必须先记录下来。

整个流程分成以下几个要点

1.apache如何转发多域名至tomcat

2.https如何转发

3.无应用名称如何设置

4.如何远程部署多域名的应用

5.如何拒绝其他域名访问

 

一共有三个应用

app.xxx.com,

dl.xxx.com

wap.xxx.com,

前两个应用部署在tomcat1上

第三个应用部署在tomcat2上

apache多域名转发至tomcat&https设置&虚拟主机的设置

 

1.apache如何转发多域名至tomcat

针对第一个问题,其实非常简单。

原本没有apache转发,直接打开了多个应用的端口

例如:tomcat1 打开8080端口

      tomcat2 打开9090端口

访问应用时必须采用这种方式app.xxx.com:8080/app/xxxservlet

 

改为apache打开80端口,由apache转发不同的域名到内网不同的tomcat应用上

访问的方式为app.xxx.com/xxxservlet即可

这样有两个好处

1.对外网只暴露80端口,其他端口不开放

2.省略应用名称

app.xxx.com---------->apache:80------------->tomcat1:

dl.xxx.com---------->apache:80------------->tomcat1:

wap.xxx.com---------->apache:80------------->tomcat2:

编辑 /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
    ServerName wap.xxx.com
    ProxyPreserveHost On
    ProxyRequests Off

    ProxyPass / http://localhost:9080/
    ProxyPassReverse / http://localhost:9080/

    ErrorLog logs/wap.xxx.com_error_log
    CustomLog logs/wap.xxx.com_access_log common
</VirtualHost>

重启service httpd restart

 

2.https如何转发

多域名转发解决了之后,发现https的需求并没有解决。关于如何配置tomcat https,如何生成证书,可以写在另一篇文章里,这里就不多说了。

我原来的设想是

客户端-----https---------->apache转发--------https--------->tomcat

后来发现

客户端-----https---------->apache转发--------http--------->tomcat

这种方式也可以。

好处是证书只需要在apache端配置即可,tomcat不需要配置,不需要打开8443端口

在http.conf中配置

LoadModule ssl_module modules/mod_ssl.so

include conf/httpd-ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

在httpd-ssl.conf中配置

Listen 443

NameVirtualHost *:443

<VirtualHost *:443>
SSLProxyEngine  On
#   General setup for the virtual host
#DocumentRoot "/etc/httpd//htdocs"
ServerName app-test.9d.vc:443
##add for
ProxyPreserveHost on
ProxyPass /server-status !
ProxyPass / http://localhost:8080/app/
ProxyPassReverse / http://localhost:8080/app/

SSLEngine on

SSLCertificateFile conf/ssl.crt/ncppserver.cer

SSLCertificateKeyFile conf/ssl.crt/ncppserver.key

</VirtualHost>

 

3.无应用名称如何设置

配置完之后,又发现了新问题。wap站的页面内部跳转都是采用

request.getContextPath()+pagePath 的方式结合。

当点击wap.xxx.com进入主站时没有问题,

可是点击页面中的链接时会出现wap.xxx.com/wap/something.jsp这样的链接

也就是说所有的链接会自动加上wap这个ContextPath

有两种解决方案

1. 将应用中所有的contextPath全部去掉,改为/

这样带来的坏处不言自明,相当于修改代码去适应部署环境,

如果部署环境变了,难道还需要再修改代码么?

2. 修改环境配置。

我采用了第二种方案

第二种方案又有两种实现方法

a.单独配置tomcat,将tomcat的默认应用设置为所需要的应用

tomcat2即如此配置:

只需要在server.xml中配置localhost 的Host节点中增加一句

 <Context path="" docBase="wap" debug="0" reloadable="true"/>

其中wap是部署在webapps中的应用

 

b.在tomcat中配置虚拟主机

tomcat1即如此配置

在server.xml中配置,增加dl.xxx.com域名的Host节点如下

      <Host name="dl.xxx.com" appBase="dl.xxx.com/webapps"
       unpackWARs="true" 
       xmlValidation="false" xmlNamespaceAware="false">
       <Context path="" docBase="dl" debug="0" reloadable="true"/>

      </Host>

appBase为相对于CATALINA_HOME的目录

在这里建一个本虚拟主机的目录

docBase为应用名

 

4.如何远程部署多域名的应用

增加了一个虚拟主机后,带来一个新问题,本来采用的是hudson远程部署的方法调用的是tomcat的远程部署url,如果远程部署虚拟主机的应用呢?思来想去,发现一个方法,在conf/Catalina/dl.xxx.com/目录里复制manager.xml即可.hudson的机器必须能解析dl.xxx.com.然后通过dl.xxx.com/manager即可远程部署

 

 

5.如何拒绝其他域名访问

在配置多域名时,发现一个问题:

例如配置了app.xxx.com 转发到 app应用

但是如果dl.xxx.com也指向此ip,则直接访问http://dl.xxx.com也能访问app应用

这是我们不愿意看到的。

故此在http.conf中增加第一个默认转发配置,原因是apache如果找不到某个域名的关联配置,将会使用第一个virtualHost的配置。

<VirtualHost *:80>
DocumentRoot /data/htdocs/nosite
ServerName *
</VirtualHost>

至于https的拒绝方案,暂时没有找到很好的,等待中...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值