私はlocalhost 3280で実行されているWebサービスを持っています。/some/long/url
localhostのポート3000でElasticsearchにアクセスしたいです。
ポート転送、ミラーリング、プロキシを介してこれを実行できますか?最良の方法は何ですか?
編集:サービスが3280で実行されており、ダウンした3000でアクセスしたいことを意味します。
答え1
2つの異なる場所(iptablesとapache)を維持する必要があり、localhost:3280にアクセスできないという副作用があるslmの答えと比較して、結果を得るためにApacheのみを使用します。これは/on 3000を介してElasticSearchを提供します(ユーザーをlocalhost:3280/some/long/urlに「リダイレクトする」代わりに - ブラウザに表示されるURLを変更します)。このソリューションは手順4と7を一度に処理します(#7のアプリケーションはレベル#4の別のIPにトラフィックをリダイレクトできます)。
すでにmod_proxy
Apacheをロードしている場合は、ポート3000を変更できます(仮想ホスト宣言で127.0.0.1の代わりに<VirtualHost>
使用されると仮定します)。*
<VirtualHost *:3000>
.
.
.
RewriteEngine On
ProxyPass / http://127.0.0.1:3280/some/long/url
ProxyPassReverse / http://127.0.0.1:3280/some/long/url
</VirtualHost>
編集する:ルールを3000に変更し、Proxypassを3280に変更し、slm提案との違いを明確にし、ProxyPassで127.0.0.1変更のポイントを削除します(仮想ホストフラグメントが元の質問で要求されたものとまったく同じであるため)。
引用:
仮想ホストディレクティブのApacheドキュメント そして ProxyPass ディレクティブの Apache ドキュメントです。
答え2
ポートリダイレクト
次の2つのルールを使用して目的の操作を実行できます。
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 3000 -j REDIRECT \
--to-port 3280
$ sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.0/8 --dport 3000 -j REDIRECT \
--to-port 3280
localhostの外部からこのルールにアクセスするには、ホストのIPアドレス(192.168.1.10など)を使用してこのルールを追加する必要があります。
$ sudo iptables -t nat -A OUTPUT -p tcp -d 192.168.1.10 --dport 3000 \
-j REDIRECT --to-port 3280
リダイレクト/ -> /some/long/url
これはApacheの書き換え規則を使用して行うことができます。これはApachehttpd.conf
ファイルに追加できます。たとえば、次のようになります。
RewriteEngine on
RewriteRule ^$ /some/long/url [R=301,L]
なぜ2つのツールがあるのですか?
それでは、なぜApacheが必要なのでしょうかiptables
?これは以下に関連しています。オープンシステム相互接続モデル。 OSIモデルには7つのレイヤーがあります。
#7.サポート(サポートまでのネットワークプロセス)
#6.表現(データ表現、暗号化および復号化、機械依存データを機械独立データに変換)
#5.セッション(ホスト間通信、アプリケーション間セッション管理)
#4.トランスポート - (エンドツーエンドの接続性、信頼性、フロー制御)
#三。ネットワーク - (パス決定と論理アドレス指定)
#2.データリンク - (物理的にアドレス指定)
#1.物理学 - (メディア、信号、バイナリ伝送)
iptables
Apacheはレイヤ#4でデータを処理し、Apacheはレイヤ#7でデータを処理します。データを封筒に似ていると思います。封筒の外側には、配送される住所(ポート番号)が含まれています。これはOSIモデルのレイヤ4です。
エンベロープの内容(HTTP + URL)は、Apacheによってレイヤ7で操作する必要があります。