2014-12-19 54 views
0

我有我的百分之OS服务器上的Tomcat(在8080上运行)应用程序,我可以通过URL访问:和Tomcat +国防部JK虚拟主机

SERVER_IP:8080/myapp 

和我有

我的管理面板
SERVER_IP:8080/myapp/admin 

,我有一个Apache服务器上的端口80

运行我有两个领域:

www.myapp.com 
admin.myapp.com 

我设法配置tomcat,mod_jk和apache服务器,使admin.myapp.com网址打开tomcat主页(SERVER_IP:8080)。

但我想要的是让admin.myapp.com网址打开SERVER_IP:8080/myapp/admin和www.myapp.com以打开SERVER_IP:8080/myapp。

我需要让apache知道请求到达admin.myapp.com时,它应该知道将请求重定向到SERVER_IP:8080/myapp/admin。显然缺少某些东西。

这里是我的配置:

的httpd.conf(admin.myapp.com.conf实际上,因为它是由面板的Plesk创建,但是我认为这是irrevelant)

<VirtualHost SERVER_IP:80 > 
    ServerName "admin.myapp.com:80" 
    ServerAlias "www.admin.myapp.com" 
    ServerAlias "ipv4.admin.myapp.co" 
    ServerAdmin "[email protected]" 
    UseCanonicalName Off 

    JkMount/ajp13 
    JkMount /* ajp13 

    .... 
</VirtualHost> 

mod_jk.conf

# Load mod_jk module 
# Update this path to match your modules location 
LoadModule jk_module modules/mod_jk.so 

# Where to find workers.properties 
# Update this path to match your conf directory location 
JkWorkersFile /usr/local/tomcat7/conf/workers.properties 

# Where to put jk logs 
# Update this path to match your logs directory location 
JkLogFile /usr/local/tomcat7/logs/mod_jk.log 

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

# Select the log format 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" 

# JkOptions indicate to send SSL KEY SIZE, 
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories 

# JkRequestLogFormat set the request format 
JkRequestLogFormat "%w %V %T" 

workers.properties

# Define 1 real worker named ajp13 
worker.list=ajp13 

# Set properties for worker named ajp13 to use ajp13 protocol, 
# and run on port 8009 
worker.ajp13.type=ajp13 
worker.ajp13.host=localhost 
worker.ajp13.port=8009 
worker.ajp13.lbfactor=50 
worker.ajp13.cachesize=10 
worker.ajp13.cache_timeout=600 
worker.ajp13.socket_keepalive=1 
worker.ajp13.socket_timeout=300 

在此先感谢。

+0

我看到了工人,但Tomcat的配置的端口8009在8080 – kamoor

+0

是正在运行,但它是定义为AJAP连接器,它运行在8009上,并在我的server.xml中定义为 cuneytyvz

回答

0

毕竟,我想出了这个解决方案,使用mod_proxy而不是mod_jk作为其他答案中提到的斜杠。但没有什么工作对我来说是如下:

ProxyPass/http://SERVER_IP:8080/ 
ProxyPass /myapp/ http://SERVER_IP:8080/myapp 

然后我加饼干以下行:

ProxyPassReverseCookiePath /myapp/
1

实现这一目标的最简单方法是在你的httpd.conf

<VirtualHost SERVER_IP:80> 

    ServerName admin.myapp.com 
    ServerAlias www.myapp.com 
    ServerAlias www.admin.myapp.com 
    ServerAlias ipv4.admin.myapp.co 
    ServerAdmin [email protected] 
    # Any additional configuration/customization. 

    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^admin\.myapp\.com$ [NC] 
    RewriteRule ^(.*)$ http://SERVER_IP:8080/myapp/admin/$1 [R=301,L] 

    ProxyRequests Off  
    ProxyPass/ajp://SERVER_IP:8009/ 
    ProxyPass /myapp/ ajp://SERVER_IP:8009/myapp 


</VirtualHost> 

您也可以通过启用mod_proxy_balancer实现负载均衡使用mod_proxy
负载mod_proxy模块。它是mod_proxy的扩展,用于负载平衡。

退房优点和缺点mod_proxymod_jkhere

祝您好运!

+0

谢谢,但它不起作用。而不是 ProxyPass/http:// SERVER_IP:8080/ ProxyPass/myapp/http:// SERVER_IP:8080/myapp确实有效。 但现在我有一个关于每个页面请求创建cookie的问题,所以我不能有一个会话正确建立。在我的登录页面上,当我输入正确的凭证时,它不会进入错误页面(所以auth可以),但它会再次重定向到登录页面,这意味着会话无法正确建立。你有什么想法吗? – cuneytyvz

+0

我会看看它。你使用的是什么版本的Apache? – slash

+0

我加入这一行 “ProxyPassReverseCookiePath/MYAPP /” 实际的答案就在这里http://stackoverflow.com/questions/2659444/tomcat-cookies-not-working-via-my-proxypass-virtualhost解决它。 它的方式。 – cuneytyvz