
私は Apache を使用してサブドメインをポート ( mod_proxy
、、 ) にリダイレクトし、IP テーブルを使用しmod_proxy_http
てmod_proxy_ajp
自分とローカル サーバー以外の直接ポート アクセスを制限しています。
私の 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
この投稿で使用するコンテキストは次のとおりです。
ソナタイプネクサス:nexus.example.com => example.com:8081
ジェンキンスCI:jenkins.example.com => example.com:8080
ウェブミン:webmin.example.com => example.com:10000
現在動作しているのは、私以外への直接ポート アクセスではありません。また、ローカル システムがポートにアクセスできるようにしたいのですが、現在それができていると思います。Jenkins mod_proxy_ajp
CI と Webmin、およびmod_proxy_http
Sonatype Nexus に使用しています。
直接ポートにアクセスすると、これらの各サービスは正常に読み込まれます。他の人に各サービスを読み込むように依頼したところ、読み込めませんでした。これが機能している理由です。
しかし、サブドメインの 1 つにアクセスしようとすると、終わりのないロード (無限ループ?) が発生します。
ただし、サブドメインで 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>
これが私の Jenkins です:
<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>
これら 2 つの仮想ホストの例では、それぞれ と を使用していmod_proxy_ajp
ますmod_proxy_http
。
なぜ無限の負荷が発生するのか、誰か解明を手伝ってくれませんか?
ありがとう。
編集:無限ループについては気にしないでください。しばらくすると、503 Service Unavailable エラーが表示されました。
答え1
iptables ルールは、印刷されたとおりに上から下へ順番に評価されます。問題は、プロキシ接続がローカルホストから行われ、次のルールに一致することです。
DROP tcp -- !c-24-7-110-109.hsd1.ca.comcast.net anywhere tcp dpt:tproxy
localhost
ではないc-24-7-...
ため、接続は切断されます。プロキシ モジュールは最終的にタイムアウトします。ルールが DROP ではなく REJECT だった場合、エラーはより早く発生します (接続試行が単に消えるのではなく、明示的に拒否されるため)。
解決策は非常に簡単です。ルールを並べ替えて、「localhost からの受け入れ」を「他の場所からの拒否」の前に配置します。(IP ルーティングは最も具体的なものと一致しますが、iptables は複数の要素を持つため、必ずしも定義されているわけではありません)。
一般的には、すべてのローカルホスト通信を許可する最初のルール(ループバックインターフェース経由、誰かがイーサネット経由で何か変なことをしようとした場合に備えて)を設定することをお勧めします。
iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT
-I
リストの先頭に( ) を挿入します。