IPアドレスとポートを使用するようにWindowsホストファイルを構成できますか?


13

IPアドレス+ポートに基づいてホスト要求を送信するようにWindows ホストファイルを構成したい。

例えば:

127.0.0.1:80       www.site1.com
127.0.0.1:8080     www.sitetwo.com

Apacheがポート8080でリッスンし、IISがポート80(デフォルト)でリッスンしているためです。

したがって、これを行う最善の方法はhostsファイルを変更することだと思います。何にも影響しません。エラーもメッセージも表示されません。


1
あなたは上の質問のこの種を求めて、より良い反応を得るでしょうserverfault.com
カールNorum

ブラウザでsite1.com(:80)sitetwo.com:8080を起動できないのはなぜですか?
イヴァン14

回答:


11

できません。hostsファイルはまさにそれです-hosts。これは、ローカルマシン内の「短絡」DNSと同等です。DNSもポートに送信できません。

実行しようとしていることを実現するには、IISまたはApacheで仮想ホスティングを設定し、それを(HTTP Host:ヘッダーに基づいて)使用して、提示するサイトをサービスに決定させます。ただし、IISとApacheの両方を同時に使用する場合、これは役に立ちません。


明確にしてください、仮想ホスティングについて理解していません。仮想ホスティングを行うにはどうすればよいですか?

4
  • このhostsファイルは、ホスト名解決専用です
  • ブラウザポートを直接指定するの不在で、:つまり<hostname>:<port>デフォルトポートへ80

典型的な問題シナリオ

  1. アプリケーションは通常、サーバーを同じデフォルトのIPアドレス127.0.0.1aka localhost (hostsファイルで定義)に設定します。
  2. おそらく他の既存/実行中のサーバー間の衝突を避けるために、アプリケーションは通常、IPアドレスではなくポートの変更を許可します。

    2a。ループバックの予約済みアドレススペースでサーバーのIPアドレスを別のIPアドレスに変更できる場合は、おそらくhostsファイルでポートを設定しようとはしないでしょう。 127.0.0.0/8

可能な解決策

Windowsに含まれるネットワークツールnetshをポートプロキシとして使用すると、この問題を回避できます。


概要

example.app
 |                               <--browser defaults to port 80
 +--> example.app:80
       |                         <--Hostname resolution by Hosts File
       +--> 127.65.43.21:80      
             |                   <--Link by netsh Utility
             +--> 127.0.0.1:8081

行動

  • サーバーを起動します localhost:8081
  • hostsファイルに「ローカルDNS」を新しい行として 追加します
    • 127.65.43.21 example.app
      • ネットワーク内の任意の空きアドレスを127.0.0.0/8使用できます。
      • 注:私は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


リソースへのリンク:

注:この回答は、stackoverflowに関するこの同様の質問/回答で説明した私の回答の複製です


これは素晴らしい答えです...リソースリンクをありがとう!
エリックヘッペルレ-CodeSlayer2010 18年

3

いいえ、できません。動作しない場合は、何か他の問題が発生しています。

127.0.0.1 site.com
127.0.0.1 www.site.com

これは開発ボックス用だと思いますか?

DNSクエリをプロキシするようなことをしていない限り、DNSはsite.comとwww.site.comをlocalhostに解決します。おそらく、ServerFaultでWebサーバーの構成に関するヘルプを求めてください。これが最も可能性の高い問題です。


助けてくれてありがとう!!!しかし、方法はありません??? それから私は、IISと異なるポートでのapache並列に実行する方法

彼らはまだ同じアドレスに行きます、ポートはホストが何をするかさえ考慮しません。ポートは引き続き機能します。それらを並行して実行できます。
-Xorlev

3

Fiddlerでそれを行うことができます。フィドラースクリプト、あなたは多くの驚くべきことをすることができます。

このようにホストを設定すると

127.0.0.1     www.site1.com    # Port 80
127.0.0.1     www.sitetwo.com  # Port 8080

でこれを追加CustomRules.js(オープンにCustomRules.js選択し、カスタマイズルールをフィドラーズにルールメニュー)

// this method is already exist
static function OnBeforeRequest(oSession: Session) {  
    if (oSession.host.toLowerCase() == "www.sitetwo.com") 
        oSession.host = "www.sitetwo.com:8080";
    ...
}

次に、Fiddlerがホストを変換し、ポート8080に接続します。


同じ効果に使用できるオープンソースの代替手段(james、owasp zap、またはその他)を知っていますか?
Marc.2377

1

ローカル開発にのみサーバーを使用していますか?その場合、127.0.0.2:80をリッスンするようにApacheを配置し、hostsファイルを使用してそれを希望のドメイン名にリダイレクトできます。


0

他の回答と同様に、ホストファイルにはポート情報がありませんが、ApacheやIISが名前ベースの仮想ホスティングで行うように、ヘッダーにリダイレクトされたリダイレクトを持つページを持つことができます。ヘッダーを確認し、必要に応じてリダイレクトします。しかし、あなたが車輪を再発明しているので、私はこれに価値を本当に見ていません。Apacheはポートベースの仮想ホスティングをサポートしていますが、iisがサポートしていると思います。

両方を実行する開発マシンを使用することが目標です。これは本番環境用です。



-1

これはあなたができることであり、地元の開発にのみ役立つでしょう。

ホストファイル:

  • 127.0.0.1 local.site1.com
  • 127.0.0.1 local.site2.com

IISで、新しいWebサイトを作成し、local.site1.comおよびlocal.site2.com用に

IISセットアップ

  • IPアドレス:すべて未割り当て(ローカルホストまたは他の利用可能なIPを使用します)
  • ポート:すでに使用されているもの以外(81,82,83など。80はデフォルトのWebサイトですでに使用されています)
  • ホスト名:空白のままにします

準備できた。使用したポートが他のプロセスで使用されておらず、ファイアウォール、ウイルス対策などからも開いていることを確認してください。

この後、次のURLを使用して、ローカルマシンまたはLANからWebサイトにアクセスできます。

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