AJP不能与服务器别名一起使用

时间:2015-10-31 05:03:25

标签: apache jsp tomcat mod-proxy-ajp

我有一个使用mod_proxy_ajp配置apache和tomcat的应用程序 我们在httpd.conf中配置了它,如下所示:

# This is to redirect any request which is coming with hostname to   Login.jsp
RewriteRule ^/$ /jsp/Login.jsp [R]

#include httpd-proxy.conf
<IfModule mod_proxy_ajp.c>
 Include conf/extra/httpd-proxy.conf
</IfModule>

进入httpd-proxy.conf后面是代理配置:

<Proxy *>
  AddDefaultCharset Off
  Order deny,allow
  Allow from all
</Proxy>
ProxyPass /jsp/ ajp://localhost:8009/jsp/
ProxyPassReverse /jsp/ ajp://localhost:8009/jsp/
在tomcat的server.xml文件中,我们已经配置了AJP连接器,如下所示:

 <Connector port="8009" protocol="org.apache.coyote.ajp.AjpProtocol" redirectPort="8443" address="localhost" 
        enableLookups="true" maxThreads="500" connectionTimeout="120000" URIEncoding="UTF-8" />

现在,当我使用主机名和IP地址访问我的机器时,请求正常,并显示Login.jsp。 但是,如果我在服务器和客户端(从浏览器运行的地方)添加一个条目到一个别名到原始服务器名称,如下所示它不起作用。

    some_ip_address original_host_name  alias1 #This is alias

当我以http://alias1发出请求时,请求被重定向到Login.jsp,但页面没有出现。 在浏览器中,我可以看到网址为http://alias1/jsp/Login.jsp但页面不会出现。 在apache ajp日志中,我可以看到响应代码是200.所以不确定问题究竟在哪里 任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

我假设您在尝试ajp之前使用了普通的mod_proxy,如果没有,你应该尝试一下。

以下是添加虚拟主机的示例代码,该虚拟主机将为Apache提供相同域和端口的页面,并将重定向到特定别名的Tomcat实例

char * getConcatString( const char *str1, const char *str2 ) 
{
    char *finalString = NULL;
    size_t n = 0;

    if ( str1 ) n += strlen( str1 );
    if ( str2 ) n += strlen( str2 );

    if ( ( str1 || str2 ) && ( finalString = malloc( n + 1 ) ) != NULL )
    {
        *finalString = '\0';

        if ( str1 ) strcpy( finalString, str1 );
        if ( str2 ) strcat( finalString, str2 );
    }

    return finalString;
}

使用此顶部的实际URL不会更改为使用Tomcat端口的URL,但您的请求将被转发。如果需要,还可以在web.xml中为特定/路径添加URL映射,以进一步隔离请求。