web-dev-qa-db-ja.com

指定したポートをURLから非表示にするにはどうすればよいですか?

example.comに1台のサーバーがあり、example.com:10001に別のサーバーがあります。
ユーザーがexample.com:10001に到達しようとすると、最終的にexample.com:10001/index.php/loginに到達しますが、そうあるべきです。

10001ポートを非表示にしてexample.com/index.php/loginのように見えるようにする書き換えルールはありますか?

1
Mrwut

このコメントの詳細は、example.com AがパブリックIPをポイントしており、サーバーがNATの背後にあり、2つのサーバーへのポート転送があることを示しています。

問題は、ポート10001を使用するサイトが別のサーバーによってホストされていることです。 example.com172.31.1.10であり、example.com:10001172.31.1.11です。

あなたが持つことができます

  • 172.31.1.10:80でのリバースプロキシ、クエリを172.31.1.11:10001にプロキシします。サーバーはApache 2.4であるため、正しいドキュメントは Apache Module mod_proxy です。

  • 外部example.com:80をリッスンし、172.31.1.10:80172.31.1.11:10001の両方にリバースプロキシを使用する新しいプロキシサーバーNginxはこれに対する効率的な代替手段です。ドキュメント: NGINXリバースプロキシ

どちらの場合も、リバースプロキシはサブフォルダーまたはサブドメインとして構成する必要があります。

1
Esa Jokinen

短い答えはノーです。ブラウザは、ユーザーからポートを隠しているものです。 httpを使用すると自動的にポート80を想定し、httpsを使用するとポート443を想定して、これらのポートをユーザーから隠します。非標準ポートを使用すると、ほとんどのブラウザはポートをアドレスの一部として表示します。

ただし、問題を正しく理解している場合は、同じIPで複数のサイトをホストする方法がいくつかあります。別のポートを使用する代わりに、サブドメイン(myothersite.example.com)を使用するか、example.com/mysite2などのexample.comの下のパスを使用できます。

4
ben

私があなたの質問を理解した場合、mod_rewriteの[P]フラグを使用してこれを達成できます。

RewriteRule "/(.*)" http://example.com":10001/$1" [P]

追加の考慮事項があり、おそらくmod_proxyを直接使用する必要があります。

0
Mark Wagner