Linux
IPTables 埠重定向應該破壞 Apache 但沒有
我在 Apache 中設置了負載平衡
httpd
:<VirtualHost *:80> DocumentRoot /var/www/html ServerName xxx.xxx.xxx.com ProxyRequests Off ProxyPreserveHost On ProxyPass / http://xxx.xxx.xxx.xxx:8080/ ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/ </VirtualHost>
:8080``tomcat
是在同一主機上執行的 Apache應用程序伺服器。我們在我工作的地方有日誌保留要求,所以我認為讓所有 apachehttpd
都可以使事情成為分析的理想選擇。我試圖讓所有公共請求通過埠 80,而不會破壞最終使用者可能擁有的任何連結或書籤。我打算通過做一些埠轉換來做到這一點,這樣一切看起來就像是通過埠 80 進入應用程序一樣。在沒有考慮我上面的負載平衡的情況下,我在
nat
表中添加了以下規則:-A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80 -A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j REDIRECT --to-ports 80
問題是,我可以通過訪問
httpd
或直接訪問應用程序:8080
。每個規則的數據包計數也在增加,因此顯然它們正在被匹配。我的問題是:為什麼這不只是創建一個無限循環?
看起來
:8080
請求會被轉發到httpd
它自己會嘗試通過遍歷來檢索它們,:8080
因此循環將繼續向前,直到我重新格式化我的新簡歷。
答案在於
-i eth0
。即使您已將 httpd 設置為 connect to
17.98.65.28
(我假設它是一個 IP oneth0
),流量實際上也不會流過eth0
,而是會使用它lo
。這樣做的原因是,當路由到盒子本身擁有的任何 IP 時,流量會流過
lo
。您可以通過以下方式驗證這一點:ip route get 17.98.65.28
您將收到一條包含 的迴線
dev lo
,它告訴您將使用哪個介面將流量發送到該地址。例如,在我的筆記型電腦上,我
wlan0
有10.252.28.62
:$ ip route get 10.252.28.62 local 10.252.28.62 dev lo src 10.252.28.62 cache <local>