Windowsホストファイルでのポート番号の使用


189

TeamViewerをインストールした後、wampserverポートを8080に変更したので、アドレスは http://localhost:8080.

C:\ WINDOWS \ system32 \ drivers \ etc \にあるホストファイルについては、次のように変更しました


127.0.0.1 www.example.com


127.0.0.1:8080 www.example.com

www.example.comにアクセスすると、私のwampserverにリダイレクトされません。どうすれば修正できますか?


特定のポートをリッスンするHTTPリクエストを適切なアプリケーションに転送するためのプロキシサーバーとしてNGNIXまたはApache HTTPサーバーが必要です->特定のポートをリッスンします(またはホスティング会社を提供するCNAMEで実行します)
Musa


多分これを確認し、受け入れられた答えをnetshの答えに切り替えますか?Windows 10でローカルに.testドメインを私のDockerイメージにマップする方法を見つけようとしたとき、私はここに行き、netshの答えは魅力のように機能しました!
Jereme

問題は、ホスト全体を単一のポート(?!)にリダイレクトしようとしているのか、それとも(そのホストの)ポート80だけをポート8080にリダイレクトしようとしているのか?ここでのほとんどの回答は、ホストのポート80を「localhost」のポート8080にリダイレクトする(または少なくともリダイレクトしようとする... ;-)方法に関するものです。例:https://www.example.comポート8080に移動する必要がありますか?またはデフォルトの443に(それがそうであるように)どうですか?つまり、httpsもローカルホストのポート8080にリダイレクトしますか?または、これがリダイレクトされる場所をまったく気にしませんか?
ilias iliadis

回答:


193

このhostsファイルは、ホスト名解決のみを目的としています(WindowsおよびUnixライクなシステム)。そこにポート番号を入れることはできません。一般的なOSレベルの構成で希望することを行う方法はありません。選択するポートを選択するのはブラウザです。

ブックマークなどを使用してください。
(一部のファイアウォール/ルーティングソフトウェアは、送信ポートのリダイレクトを許可する場合がありますが、これは本当に魅力的なオプションのようには思えません。)


6
ブックマークの使い方、リンク、またはこれに関するドキュメントやチュートリアルに
アクセスしていただけ

@ジェレメ:OPにそれを伝える必要があります。私はそれについて何もすることができません
マット

1
@マットいいですね?これを知っている人に少し下にスクロールして、試してもらいたいだけです。Windows 10でローカルに.testドメインを私のDockerイメージにマップする方法を見つけようとしたとき、私はここに行き、netshの答えは魅力のように機能しました!
Jereme

169

Fiddler 2アプリケーションを介してホストファイルを変更することで、必要なことを実現できます。

次の手順を実行します:

  1. Fiddler2をインストールする

  2. Fiddler2メニューに移動します。- [ ツール ] > [ ホスト ] (クリックして選択)

  3. 次のような行を追加します:-

    localhost:8080 www.mydomainname.com

  4. ファイルを保存し、www.mydomainname.comブラウザでチェックアウトします。


34
これは悪い解決策です。Fiddlerを常に実行している必要があります。
James Huckabone、2015年

48
@JamesHuckabone:より良いソリューションはありますか?私たちはそれが大好きです!
Rajat Gupta、

16
この方法を使用するとエラー400 Bad Requestが表示される
Sam

3
これはもう機能していないようです。fiddler2とfiddler4の両方で試してみました
バッシャー

1
@basher Uは、確実にFiddlerのRules.jsでスクリプトを作成できます。Fiddlerのホストの機能性はWindowsのホストファイルではなく、操作しやすくするためにその名前を再現したものです。自動応答のようなもので、それを直接スクリプトで実行できることのサブセットにすぎません。メニューで何かができない場合は、スクリプトを作成してください。
m3nda

157

私はWindowsに含まれているネットワークツールを使用してこれをなんとか実現しましたnetsh

Matが指摘するように:hostsファイルはホスト名の解決のみを目的としているため、この2つを組み合わせるとうまくいきました。


概観

example.app:80
 |                           <--Link by Hosts File
 +--> 127.65.43.21:80
       |                     <--Link by netsh Utility
       +--> localhost:8081

行動

  • サーバーを起動しました localhost:8081
  • hostsファイルに新しい「ローカルDNS」を新しい行として 追加しました
    • 127.65.43.21 example.app
      • ネットワーク127.0.0.0/8127.x.x.x)内の任意の空きアドレスを使用できます。
      • 注:127.65.43.21:80別のサービスによって占有されていないことを前提としています。
      • あなたはチェックすることができます netstat -a -n -p TCP | grep "LISTENING"
  • netshコマンドユーティリティ で次のネットワーク構成を追加
    • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1
  • これでサーバーにアクセスできます http://example.app

注:
-これらのコマンド/ファイルの変更は、管理者権限で実行する必要があります

- netshをPortproxyのは、IPv6のライブラリを必要とするのみでも使用v4tov4に、通常、彼らはまた、そうでない場合は、次のコマンドを使用してインストール、デフォルトで含まれます:netsh interface ipv6 install


次のコマンドで追加したエントリ確認できます

netsh interface portproxy show v4tov4

次のコマンドでエントリ削除できます。

netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21


リソースへのリンク:


これではうまくいきません。あなたが示したリンクでは、「また、127.0.0.1をconnectaddressとして使用することはできません。」と書かれています。
ドンボックス

@DonBox:セットアップの詳細を教えていただければ、私がお手伝いできます。使用127.0.0.1をサーバーがで開始するので、接続アドレスとしては、基本的に提示した場合のシナリオでは必要条件であるローカルホストとしてデフォルト他の多くのプログラムで行います。別のアドレスから開始でき、ポート転送メカニズム全体が不要な場合は、hostsファイルを変更するだけです。おそらく、ここ詳しく説明されているように、ipv6プロトコルがインストールされていない可能性があります。次のコマンドを使用してインストールしてくださいそれら:netsh interface ipv6 install
Pau Coma Ramirez

13
これは、ツールがベースウィンドウ10のインストールに既にインストールされており、これがまさに私が必要とするものを実行するため、受け入れられる答えになるはずです。私はapacheとmod_proxyのインストールを検討していましたが、これははるかに優れたソリューションです。
Max Young

1
私にはうまくいきません。Netshはアドレスを転送するようですが、ポートは転送しません。
steph643

2
私は港湾労働者のportainerを使用します。これはポート9000でlocalhostを使用します。上記のコマンドを改造して、アドレスにポートを指定する必要なく、portainer.localを使用します。最初に、127.0.0.1一致するアドレスをportainer.localhostsファイルに追加します。それから私はそれを実行します:それを実行するにnetsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=9000 connectaddress=127.0.0.1 は、cmd / powershellでEnterキーを押します。この後、と入力してnetshを終了しますexit。ブラウザでタイプhttp://portainer.localすると、http://localhost:9000以前使用していた場所に移動します。これは私にとって魅力のように働きました。
EffectiX 2018

14

Fiddler2->ルール->カスタムルール

次に、関数OnBeforeRequest onを見つけ、最後に次のスクリプトを挿入します。

if (oSession.HostnameIs("mysite.com")){
    oSession.host="localhost:39901";
}

確かにFiddlerは、ポート80またはSkypeでWebサーバーを実行しないことを期待するよりもはるかに強力です... Windowsでは、少なくともキャプチャ機能を備えたLinuxのMonoよりもうまく機能します。LinuxはCLRLのInetを使用しません。これはFiddlerで物事を行うためのより良い方法です。1つのファイルでエクスポートできるからです。
m3nda

3

最も簡単な方法は、リバースプロキシとしてErgoを使用することです。https//github.com/cristianoliveira/ergo

サービスとそのIP:PORTを設定し、それをergoがルーティングします:)。

nginxまたはを使用して同じことを達成できますが、apacheそれらを構成する必要があります。


3
Ergoは、(ユーザー名に基づいて)取り組んだプロジェクトのようです。その場合は、その製品と提携していることをより明確に示す必要があります。この回答と他の回答をご覧ください。
フランクタン

2

-ネットワーク127.0.0.0/8で任意のフリーアドレスを使用できます。私の場合、これはpythonフラスコに必要です。これは私がやったことです。ホストファイルにこの行を追加します(ウィンドウはCの下にあります: \ Windows \ System32 \ drivers \ etc):

127.0.0.5 flask.dev
  • 私の場合、ポートがデフォルトのポート「80」であることを確認してください。これはpythonフラスコ内のものです。 app.run("127.0.0.5","80")

  • コードを実行して閲覧します flask.dev


1

何が起こっているのかというと、ローカルホスト上で別のサーバーを実行していて、この新しいサーバーに次のような別のローカルホスト名を与えたい場合です。 http://teamviewer/

あなたが実際に探しているのは仮想ホストの機能だと思います。私はApacheを使用しているため、他のWebデーモンがこれをどのようにサポートしているかわかりません。多分それは別名と呼ばれています。Apacheのドキュメントは次のとおりです。

Apache仮想ホストの例


1

connectaddress = 127.0.0.1でnetshを使用すると、うまくいきませんでした。

これはlocalhostにリンクしているように見えるので、インターネット上のどこを見ても、connectaddress = 127.xxx(つまり、127.ipv4アドレス、127.0.0.1ではなく)を使用することで解決しました。ループバックがnetshで機能するように、同じですが制限はありません。


最初と最後の段落を削除することをお勧めします。既存のソリューションが機能せず、別のソリューションを見つけたと伝えてください。そうでなければ、あなたの答えはコメントのように見えるので、人々はそれを「答えではない」とフラグを立て、それは削除されます。
StaceyGirl


0

特定のポートをリッスンする適切なアプリケーションにHTTPリクエストを転送するためのプロキシサーバーとしてNGNIXまたはApache HTTPサーバーが必要です(またはホスティング会社を提供するCNAMEでそれを実行します)。これは最も強力なソリューションであり、これは新しいサブドメインを追加し続ける、またはDNSレコードがサーバーでポイントされたときに自動的に新しいドメインを追加するための本当に簡単な方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.