Centos5
Tomcat Solr 超時
(Plesk 10.4 centos 5.8 linux apache2 伺服器,Tomcat5 在埠 8080 和 Apache Solr)
我在請求 domain.com:8080 或 www.domain.com:8080 或 ip.ad.dr.ess:8080 時收到“連接已超時”
我能找到的每一個原因似乎都不是這樣:
- Plesk 認為 Tomcat 執行良好並將其列為活動服務。
- 防火牆目前在埠 8080 上有一條接受所有規則。
- catalina tomcat 日誌 (/var/log/tomcat5) 中沒有任何相關內容 - 只是上次啟動 tomcat 的一些內容。所有失敗的請求都沒有記錄。
netstat -lnp | grep 8080
給出以下內容,我相信這 意味著 Tomcat 正在偵聽來自任何 ip 和任何埠的所有 ip 地址上的埠 8080 的請求(如果我錯了,請糾正我)::
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4018/java
這涵蓋了我能找到的所有導致超時的原因——所以我一定錯過了一些基本的東西。
似乎 Tomcat 正在執行,正在偵聽正確的埠,正在獲取適當的 IP 地址,沒有被防火牆阻擋,並且在以日誌中記錄的方式接收請求後沒有失敗(所以我相信它可以不要記憶體不足,或類似的東西)。
我完全不知道如何繼續調試它。我一定忽略了一些明顯的事情。任何人都可以幫忙嗎?
好吧,事實證明有防火牆,然後有防火牆。
我天真地假設在 Parrallels/Plesk/VZ 防火牆 UI 中的埠上設置允許訪問規則就足以阻止防火牆阻止對該埠的訪問。我錯了,這個 UI 並沒有觸及基於 iptables 的完全獨立的防火牆層,它阻止了除選定 IP 之外的所有訪問 8080。
在我的 Plesk 設置中(可能特定於我的託管安排,我不確定)解決方案是添加規則
/etc/firewall/include
,如下所示:$IPTABLES -I INPUT -p tcp --dport 8080 -s ip.ad.dr.ess -j ACCEPT $IPTABLES -I OUTPUT -p tcp --sport 8080 -d ip.ad.dr.ess -j ACCEPT
…隨後是
service firewall restart
(將 ip.ad.dr.ess 交換為您要列入白名單的 IP 地址)。我很確定在大多數託管安排中,您可以將這些行作為命令執行/sbin/iptables
而不是$IPTABLES
,但是擁有自定義防火牆設置文件非常方便。我想這是“如果你給一個男人拐杖(比如 Plesk),他會認為他可以依靠那個拐杖”的例子