環境:アプリケーションサーバーから特定のポートのページを要求するWebサーバー。
質問:アプリケーションサーバーで実行されている特定のWebアプリケーションの再起動中にアプリケーションサーバーにページ要求が入ると、起動は中断されます。
質問:Webアプリケーションを起動するシェルスクリプトの先頭に特定のポート(またはリダイレクト)に一種のブロックを含めることは可能ですか?これは「すぐに」機能する必要があり、もちろん、シェルスクリプトの最後で逆に機能する必要があり、アプリケーションが実行された後に要求が正常に流れます。
答え1
アプリケーションサーバーコンピュータから:
アプリケーションを起動する前に:
iptables -I INPUT -d <app server ip> --dport <app server port> -j REJECT
起動が完了した後:
iptables -D INPUT -d <app server ip> --dport <app server port> -j REJECT
必要に応じて、「アプリケーションがロード中です」とマークされた他のサーバーにトラフィックをリダイレクトすることもできます。その場合は、以下を交換してください。
-j REJECT
そして
-j DNAT --to-destination <ip address of other machine>
これら2つのコマンドについて。これを行うには、IP転送を有効にする必要があります。構成が必要です。
net.ipv4.ip_forward = 1
存在する/etc/sysctl.conf
これは次の起動時に適用されます。実行中のシステムにすぐに適用するには:
echo 1 > /proc/sys/net/ipv4/ip_forward
また、受信サーバーがそのサーバーで開始されているように見えるように、アプリケーションサーバーからサーバーへのトラフィックを偽装することもできます(つまり、送信元IPアドレスを書き換えます)。次の方法でこれを実行できます。
iptables -t nat -I POSTROUTING -o <interface traffic will get out> -j MASQUERADE
別のオプションは、アプリケーションサーバーと同じシステムに別のサーバーがあり、「アプリケーションがページをロードしています」とマークされた別のポートにある場合は、トラフィックをそのポートにリダイレクトできることです。 REJECT/DNATの代わりに同じアイデアです。
-j REDIRECT --to-port <other local server port number>
このオプションはアプリケーションサーバーをルーターに変換する必要はありません:) (ip_forwardは必要ありません)