我正在设置一个在 Ubuntu 14.04 上运行的服务器。我安装了 apache 和 tomcat,并启用了 apache 的重写模块和 mod_jk。我已正确配置 mod_jk,以便 apache 将请求正确转发到应用程序上下文。我的域名也正确指向服务器,并且能够浏览到它。但是,我的虚拟主机文件有问题。我试图将一个域指向在 tomcat 中运行的应用程序。这是我目前拥有的虚拟主机文件。
<VirtualHost *:80>
ServerName www.domain.com
DocumentRoot /var/www/domain
RewriteEngine On
RewriteRule \/$ /context [L]
</VirtualHost>
我尝试过很多变体,但没有运气。任何解决问题的帮助将不胜感激。
** 更新 **
我能够重写以 tomcat 应用程序命名的目录,在此示例中context
位于我的 apache html 文件夹中(/var/www/html/context)
。这是我的虚拟主机文件现在的样子:
<VirtualHost *:80>
ServerName www.domain.com
DocumentRoot /var/www/html/context/
<Directory />
Options FollowSymLinks
AllowOverride None
RewriteEngine On
RewriteRule \/$ /context [L]
</Directory>
<Directory /var/www/html/context/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
现在的问题是它没有重写名为 的 tomcat 应用程序context
。总结一下:
http://{{ip_address}}/context
- 正常工作并显示 tomcat 应用程序
http://domain.com
- 将我重定向到其中的 html 内容/var/www/html/context
如何强制重写规则重定向到 tomcat 应用程序名称context
?是否有一个全局设置可以覆盖重写,而不是向使用 mod_jk 安装的应用程序显示 apaches html 目录中的内容?
在此先感谢您的帮助。
答案1
更新2
<VirtualHost *:80>
ServerName www.domain.com
ServerAlias 10.10.10.10(server's IP) server'sFQDN
DocumentRoot /var/www/domain
RewriteEngine On
# Rewrite everything after ' / ' to /context/restofURLifany
RewriteRule ^/(.*)$ /context/$1 [L,QSA,PT]
# Rewrite ' / ' to /context
#RewriteRule ^/$ /context [L,PT]
# Send all '/context' traffic to prod loadbalancer ' prod_lb '
JkMount /context prod_lb
# Send all other traffic from root domain ' / ' to prod loadbalancer ' prod_lb '
JkMount /* prod_lb
</VirtualHost>
编辑/etc/hosts
并在顶部添加如下行:
#IPaddr hostnames
10.10.10.10 serverFQDN hostname www.domain.com
我假设您的问题是您使用的 apache 域名未与该虚拟主机关联。
添加httpd.conf
:NameVirtualHost *:80
更新
这是你想要的?
RewriteRule ^/(.*)$ /context/$1 [L,QSA,PT]
如果您安装了 mod_jk,这应该可以帮助您指明正确的方向:
在虚拟主机配置中
<VirtualHost *:80>
ServerName www.domain.com
DocumentRoot /var/www/domain
# Send all traffic from root domain ' / ' to prod loadbalancer ' prod_lb '
JkMount /* prod_lb
</VirtualHost>
在workers.properties文件中
# Define list of workers that will be used for mapping requests
worker.list=prod_lb,status
# Define Tomcat App Node1
# modify the host as your host IP or DNS name.
worker.node1.port=9999 #AJP1.3 port Tomcat listening on
worker.node1.host=127.0.0.1 #Insert FQDN or IP here (I prefer IPs for speed)
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=1
worker.node1.max_packet_size=16384
worker.node1.connect_timeout=10000
worker.node1.prepost_timeout=10000
worker.node1.socket_timeout=5000
worker.node1.socket_keepalive=True
worker.node1.reply_timeout=30000
worker.node1.max_reply_timeouts=3
worker.node1.recovery_options=0
worker.node1.domain=group1
worker.node1.stopped=false
# Load-balancing behavior
worker.prod_lb.type=lb
worker.prod_lb.balance_workers=node1
worker.prod_lb.max_reply_timeouts=10
worker.prod_lb.method=Session
worker.prod_lb.lock=P
worker.prod_lb.sticky_session=1
worker.status.type=status
Tomcat的server.xml
<!-- Define an AJP 1.3 Connector on port -->
<Connector port="9999" address="${jboss.bind.address}" protocol="AJP/1.3"
maxThreads="300" connectionTimeout="5000" maxHttpHeaderSize="16384" packetSize="16384"
emptySessionPath="true" enableLookups="false" />
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="tomcat_node1">
答案2
我编辑了我的虚拟主机文件。我在虚拟主机文件中添加了 JkMount,而不是 000-default.conf,并且能够让 apache 将请求传递给 tomcat 应用程序,而不是 apaches web 目录中的文件夹。我现在还有 2 个虚拟主机文件,一个用于主域,另一个用于没有 www 的域。字首。这两个文件如下所示:
www_domain.conf
<VirtualHost *:80>
ServerName www.domain.com
JkMount /context* ajp13_worker
<Directory />
Options FollowSymLinks
AllowOverride None
RewriteEngine On
RewriteRule \/$ /context [L]
</Directory>
</VirtualHost>
域配置文件
<VirtualHost *:80>
ServerName domain.com
RewriteEngine On
RewriteRule \/$ http://www.domain.com [L]
</VirtualHost>