VirtualHost 具有指向 tomcat 应用程序的 mod 重写

VirtualHost 具有指向 tomcat 应用程序的 mod 重写

我正在设置一个在 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.confNameVirtualHost *: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>

相关内容