![使用 Apache-[警告] 代理程式的 Tomcat 叢集:沒有協定處理程序對 URL / 有效。如果您使用的是 mod_proxy 的 DSO 版本](https://rvso.com/image/652947/%E4%BD%BF%E7%94%A8%20Apache-%5B%E8%AD%A6%E5%91%8A%5D%20%E4%BB%A3%E7%90%86%E7%A8%8B%E5%BC%8F%E7%9A%84%20Tomcat%20%E5%8F%A2%E9%9B%86%EF%BC%9A%E6%B2%92%E6%9C%89%E5%8D%94%E5%AE%9A%E8%99%95%E7%90%86%E7%A8%8B%E5%BA%8F%E5%B0%8D%20URL%20%2F%20%E6%9C%89%E6%95%88%E3%80%82%E5%A6%82%E6%9E%9C%E6%82%A8%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%20mod_proxy%20%E7%9A%84%20DSO%20%E7%89%88%E6%9C%AC.png)
我是 apache 和 tomcat 的新手,嘗試使用 mod_proxy 實現叢集並能夠運行多個 tomcat 實例,但遇到了困難。這是我的配置:
httpd.conf:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy_ajp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_balancer.so
<Proxy balancer://testcluster stickysession=JSESSIONID>
BalancerMember ajp://localhost:8109 min=10 max=100 route=server1 loadfactor=1
BalancerMember ajp://localhost:8209 min=20 max=200 route=server2 loadfactor=1
</Proxy>
ProxyPass / balancer://testcluster/
重新啟動 apache 時,error.log 中顯示以下內容:
[Fri Feb 27 16:45:44 2015] [notice] Apache/2.2.22 (Ubuntu) configured -- resuming normal operations
[Fri Feb 27 16:46:48 2015] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
而且我的兩個實例的 server.xml 已設定為 jvmRoute="server1" 和 jvmRoute="server1"....
答案1
我知道這是一個老問題,但也許答案對其他人有幫助。
最後兩個載入模組的模組名稱錯誤。mod_proxy_ajp.so
載入為proxy_module
和mod_proxy_balancer.so
as proxy_http_module
。
錯誤的:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy_ajp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_balancer.so
正確的:
LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
答案2
不確定您使用的是哪個作業系統,但通常會執行以下操作:
- 啟用模組:
a2enmod proxy
a2enmod proxy_http
. - 就您而言,您想使用 AJP,因此您可能必須安裝一兩個東西(例如
a2enmod proxy_ajp
)。 - 在您的虛擬主機中(您可以這樣做,
http.conf
但這不是最靈活的方式)。
這是您從問題中複製的內容:
<Proxy balancer://testcluster stickysession=JSESSIONID>
BalancerMember ajp://localhost:8109 min=10 max=100 route=server1 loadfactor=1
BalancerMember ajp://localhost:8209 min=20 max=200 route=server2 loadfactor=1
<Proxy>
ProxyPass / balancer://testcluster/
我就是這樣做的(沒什麼不同):
<Proxy balancer://testcluster >
BalancerMember ajp://localhost:8109 min=10 max=100 route=server1 loadfactor=1
BalancerMember ajp://localhost:8209 min=20 max=200 route=server2 loadfactor=1
<Proxy>
ProxyPass / balancer://testcluster/ stickysession=JSESSIONID