具有指向 tomcat 應用程序的 mod rewrite 的 VirtualHost
我正在設置一個在 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.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">