Ubuntu

具有指向 tomcat 應用程序的 mod rewrite 的 VirtualHost

  • August 13, 2016

我正在設置一個在 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> 

現在的問題是它沒有重寫到名為context. 所以總結一下:

http://{{ip_address}}/context- 正常工作並顯示 tomcat 應用程序

http://domain.com- 將我重定向到其中的 html 內容/var/www/html/context

如何強制重寫規則重定向到 tomcat 應用程序名稱context?是否有一個全域設置將覆蓋重寫,而不是將 apaches html 目錄中的內容顯示到使用 mod_jk 安裝的應用程序?

在此先感謝您的幫助。

我編輯了我的虛擬主機文件。我在虛擬主機文件中添加了 JkMount 而不是 000-default.conf 並且能夠讓 apache 將請求傳遞給 tomcat 應用程序而不是 apaches Web 目錄中的文件夾。我現在還有 2 個虛擬主機文件,一個用於主域,另一個用於沒有 www 的域。字首。這是 2 個文件的樣子:

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>

域.conf

<VirtualHost *:80>
       ServerName domain.com

       RewriteEngine On
       RewriteRule \/$ http://www.domain.com [L] 
</VirtualHost>

更新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">

引用自:https://unix.stackexchange.com/questions/179392