如何通过mod_proxy连接器(ajp)

时间:2016-12-11 11:43:23

标签: apache tomcat https mod-proxy ajp

我在linux系统上有一个apache服务器(在amazon aws上),运行https。我也有一个tomcat。我想用apache作为tomcat的前门。我为apache启用了mod_proxy模块,并且重定向到tomcat工作正常,看起来像这样:

<VirtualHost *:80>
   ServerName my.domain.com

   #Log
   ErrorLog /var/log/ajp.error.log
   CustomLog /var/log/ajp.log combined

   #AJP configuration
   <Proxy *>
       Order deny,allow
       Deny from all
       Allow from all
   </Proxy>

   ProxyRequests Off

   ProxyPass / ajp://localhost:8009/
   ProxyPassReverse / ajp://localhost:8009/

 </VirtualHost>

我在/etc/httpd/conf.d文件夹中的httpd.conf文件底部添加了这行代码。

但是如果我在httpd.conf文件中添加另一个VirtualHost以重定向到https,则重定向到https会起作用,但会显示apache Test页面,而不是tomcat页面。如果我删除此重定向VirtualHost,将显示apache tomcat页面。我还启用了mod_rewrite模块。我在ssl.conf中配置的https内容(/etc/httpd/conf.d/ssl.conf),它运行正常。在那里我设置了ssl证书,如果客户端使用已知的https证书发出请求,服务器将回答该请求。否则没有。

我添加到httpd.conf的https重定向的VirtualHost如下所示:

    <VirtualHost *:80>
         ServerName my.domain.com
         RewriteEngine on
         ReWriteCond %{SERVER_PORT} !^443$
         RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
    </VirtualHost>
你能帮帮我吗?我在这做错了什么?我应该在/etc/httpd/conf.d/ssl.conf文件中进行更改吗?我非常

2 个答案:

答案 0 :(得分:1)

好的,现在我得到了解决这个问题的方法。在VirtualHost结束之前,我在/etc/httpd/conf.d/ssl.conf的底部写了这行:

#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined

#AJP configuration
<Proxy *>
       Order deny,allow
       Deny from all
       Allow from all
</Proxy>

ProxyRequests Off

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

答案 1 :(得分:0)

以下栏目

Passive mode

就像是说“这个块会处理<{3}}的所有”。您不能添加具有相同端口/ ServerName的另一个:它们不会合并,一个将影响另一个。

如果https部分已经运行并且您想要将所有http流量重定向到https,则可以完全注释/删除第一个<VirtualHost *:80> ServerName my.domain.com # [...] </VirtualHost> 块(使用代理)。 <VirtualHost *:80>中的代理规则将处理所有内容(假设https部分有效)。

如果您只想将部分重定向到https(不是您的问题,但这应该有助于您理解),您应该添加<VirtualHost *:443> / RewriteEngine / ReWriteCond指令现有的虚拟主机内。