アクティブポートリダイレクト

アクティブポートリダイレクト

環境:アプリケーションサーバーから特定のポートのページを要求する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は必要ありません)

関連情報