
我使用 Apache 將子網域重新導向到連接埠 ( mod_proxy
、mod_proxy_http
、mod_proxy_ajp
) 和 IP 表來限制直接連接埠存取權(除了我和本機伺服器)。
我的 IP 表如下所示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:tproxy
ACCEPT tcp -- localhost anywhere tcp dpt:tproxy
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:http-alt
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:webmin
ACCEPT tcp -- localhost anywhere tcp dpt:webmin
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我將在這篇文章中使用的上下文是:
Sonatype Nexus:nexus.example.com => example.com:8081
詹金斯 CI:jenkins.example.com => example.com:8080
網路分鐘:webmin.example.com => example.com:10000
我現在所做的工作是除了我之外沒有直接的連接埠存取權。我還希望本地系統能夠存取我現在擁有的連接埠。我用於mod_proxy_ajp
Jenkins CI 和 Webmin 以及mod_proxy_http
Sonatype Nexus。
當我訪問直接端口時,這些服務都加載得很好。當我要求其他人加載每個內容時,他們無法加載,所以這是有效的。
然而,現在,當嘗試訪問其中一個子域時,我得到了永無止境的負載(無限循環?)
不過,當我在子網域上運行tracert時,它結束得很好,所以我可以劃掉無限循環。
這是我的 Sonatype Nexus apache 虛擬主機設定:
<VirtualHost *:80>
ServerName nexus.majornoob.com
ServerAlias www.nexus.majornoob.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
ProxyPassReverseCookiePath / /
ErrorLog /var/www/majornoob/error-nexus.log
LogLevel warn
CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>
這是我的詹金斯:
<VirtualHost *:80>
ServerName jenkins.majornoob.com
ServerAlias www.jenkins.majornoob.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / ajp://127.0.0.1:8080/
ProxyPassReverse / ajp://127.0.0.1:8080/
ProxyPassReverseCookiePath / /
ErrorLog /var/www/majornoob/error-jenkins.log
LogLevel warn
CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>
這兩個虛擬主機的例子分別使用mod_proxy_ajp
和mod_proxy_http
。
誰能幫我弄清楚為什麼我會得到無限的負荷?
謝謝。
編輯:沒關係無限循環。一段時間後,我收到 503 服務不可用錯誤。
答案1
iptables 規則按列印順序從上到下進行評估。您遇到的問題是代理連接來自本機主機,它符合以下規則:
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:tproxy
localhost
不是c-24-7-...
,因此連接被斷開。代理模組最終超時;如果規則是 REJECT 而不是 DROP,您會更快收到錯誤(因為您會被明確拒絕,而不是連線嘗試消失)。
解決方案非常簡單:重新排序規則,將「從本機接受」放在「從其他任何地方拒絕」之前。 (IP 路由以最具體的方式匹配,但由於 iptables 是多因素的,因此不一定定義)。
我通常建議有一個允許所有本地主機通信的第一條規則(通過環回接口,以防萬一有人通過以太網嘗試一些奇怪的事情);嘗試新增
iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT
將 ( -I
) 插入到清單頂部。