Linux / OSXの/ etc / hosts /ファイルで、ワイルドカードサブドメインを実行するにはどうすればよいですか?


170

ローカルホストでサブドメインをテストする必要があります。ファイルに追加*.localhost.comした結果を効果的に取得するにはどうすればよい/etc/hosts/ですか?

不可能な場合、この問題を回避するにはどうすればよいですか?ローカルサーバーでワイルドカードのサブドメインをテストする必要があります。Django devserverですが、Django dev serverはサブドメインを処理できますか?他のソフトウェア/ルーティングで必要な結果を得ることができますか?


1
スーパーユーザーに属しますか?
ポールR

私は人々がそれは不可能だと言うことを知っています!しかし、どうすればそれを行うことができます!/ etc / hosts /の外にあるものを使用して、効果を得ることができます。開発サーバーをテストしています。
MikeN


ほとんどの答えは最初の質問(localhostサブドメインワイルドカード)に焦点を当てているので、2番目の質問にコメントとして答えます。はい、Django devサーバーはlocalhostサブドメインを完全に処理できます。トラフィックをそのまま送信するには(以下のさまざまなソリューションのいずれかを使用して)!
hheimbuerger

回答:


44

PythonでDNSプロキシを作成しました。/ etc / hostsのワイルドカードエントリを読み取ります。こちらをご覧くださいhttps : //github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


これは完璧です!私は長い間このような単純なソリューションを探していました(OSX Mavericks BTWで作業中)
ビリームーン

2
今、私たちはpip install
それだけ

1
これをインストールし、すべてを実行して実行しましたが、サイトをブロックしません。
DisplayName

これを十分に支持することはできません。私はこれを永遠に必要とし、この質問と回答の宝石につまずきました。共有してくれてありがとう!
ファーリー

153

dnsmasqをインストールします(とにかくこれをすべてのLinuxデスクトップでDNSキャッシュとして実行します)。次dnsmasq.confの行を追加します。

address=/localhost.com/127.0.0.1

7
ブリリアント!Macユーザーへの注意、これは本当に簡単です:1. sudo port install dnsmasq2.編集/opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
tomc

17
OSXとbrew:上記と同じですが、brew install dnsmasq
マットハンフリー

1
fyi brew> port(re @MattHumphreyの提案)
electblake

1
この例は、おそらく私がvagrantup.comをローカルサービスに使用しているために機能しません。心配しないで、私はすでに正しいものにIPを変更しました192.168.50.11が、DNSは解決していません。アイデアはありますか、この例は「非127.0.0.1」IPに適していますか?
ブライアン

6
素晴らしいヒント。Ubuntu 14.04デスクトップ(デフォルトではdnsmasqを実行します)の場合、というファイルを作成し、/etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.confその行を追加address=/localhost.com/127.0.0.1してから再起動します。
user38397

60

/etc/hostsファイルにワイルドカードを指定することはできません。必要なホスト名を明示的に指定するか、適切なルールを使用してローカルネームサーバーを設定します。


15

DNSサーバーをセットアップし、各クライアントがそれを使用して解決する必要があります。サーバー自体は、dnsmasqのように「軽い」ものでも、BINDのように重いものでもかまいません


dnsmasqの+1は、非常によく文書化されており、使いやすい
David Schmitt

dnsmasqはこれを行うことができません。
DisplayName

--address=dnsmasq.conf manページのセクションで説明されている動作のどの部分が、上記のユースケースをカバーしていないのですか?
ジェラルドコームズ

11

シンプルなワークフロー(何もインストールする必要はありません)

個人的には、そのためのPACファイルを作成し、ブラウザーでそれを使用することを好みます。

ステップ1:ファイルを作成します。例:*.proxy.pac*どこか($homeフォルダーを使用します)

ステップ2:このコードを貼り付けます(例:ポート8000​​を使用):

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

ステップ3:ブラウザでこのPACファイルを使用するようにします。

PACおよびFirefox用のYouTubeビデオ

ステップ4:これにアクセスして、アプリをテストできます:http://mysubdomain.localhost/

ステップ5:お楽しみください:)


3
おそらく、これはブラウザにのみ影響を与えることに言及する価値があります。他のプログラム(などwgetは影響を受けません)。それ自体は問題ではありませんが、おそらくこれを言及する方が良いでしょう。
ウィレムヴァンOnsem

.pacルートに移動してnode.jsサーバーを実装している場合、これがreq.url絶対URLであることに驚かれることでしょう。これは、実際のプロキシサーバーを作成することを前提としているためです。しかし、デバッグのために/ etc / hostsエントリの追加を停止する方法としてこの手法に至ったのは驚くべきことです。参考までに、私が行ったのと同じ道を行く人に。
トムボーテル

5

私は私の古いプロジェクトを整理しました:

https://github.com/airtonix/avahi-aliases

要件:

  • avahiとpython-avahiがインストール可能なLinux
  • .localドメインは大丈夫です(avahiは他の種類をサポートしていません)

dnsmasqまたはpython dns proxyを使用する利点:

  • ローカルネットワーク上の他のavahi / bonjourユーザーは、作成したエイリアスを解決してネットワークにアナウンスできます(ポート5353へのアクセスを許可している場合)

4

私の場合、このDNSベースのソリューションは何もインストールすることなく完全に機能しました:https : //gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282(Mac OSX 10.9)


Mac OSXのこのようなすばらしいソリューション。
iDev247

リンク切れです。リンク、ソリューションを更新するか、何らかの方法でこの回答を非推奨にしてください。乾杯。
エリックホドンスキー

完了(バックアップが追加されました)
Fedir RYKHTIK

3

でワイルドカードを使用することはできません/etc/hosts

BIND、組み込みではあるが非アクティブなDNSサーバー、Apacheを使用してOS Xで達成する方法についての良いチュートリアルをご覧ください


5
Apacheはサブドメインとは関係ありません。
匿名

3

あなたが使用dnsmasqしたい場合は、追加することからNetworkManager開始することができます(または必要ですか?)dnsmasqNetworkManager

dns=dnsmasq

/etc/NetworkManager/NetworkManager.conf。その後、dnsmasq configは/etc/NetworkManager/dnsmasq.conf/etc/NetworkManager/dnsmasq.d/respに行きます。


2

簡潔な答え:

/ etc / hosts /ファイルでは、ワイルドカードやポート番号を使用できません。サブドメインごとに1つのエントリを作成する必要があります


2
ポート番号を指定するにはどうしますか?DNS AFAIKではありません。
ptman

2

簡単な答えは、そうではないということです。より長い答えは、あなたが実際に達成したいことをより明確にする必要があるということです。おそらくより良い方法とそれを達成する別の方法があるからです。

Webホスティング(他の方法で使用されたことはありません)は、仮想ホスティング対応のWebサーバーと組み合わせてDNSで実行されます。より多くの詳細については、ワイルドカードDNSレコード(ウィキペディア)、および記事のApacheとバインドでホスティングワイルドカードバインドとApacheを使用してLinux用。

最悪の場合、ローカルDNSサーバーを使用できます。


2

このサブジェクトの一般的なタスクは、ディレクトリをサブドメインにマップすることです。そのための非常に簡単な方法は、ディレクトリベースのエントリをhostsファイルに自動的に追加することです。

#!/ usr / bin / python

輸入OS

hostsFile = open( "/ etc / hosts"、 "a +");

行= hostsFile.readlines()

os.listdir( '/ opt / subdomainDirs')のfileNameの場合:

    entryExists = False
    ラインインラインの場合:
        行のfileNameの場合:
            entryExists = True  

    entryExistsではない場合:
        hostsFile.write( "127.0.0.1" + fileName + ".localhost \ n");

2

私がこの問題に対する究極の答えであると考えるものをありがとうございます、XAMPP)

hostsファイル(エントリを追加)

ファイル:/ etc / hosts(非Windows)

127.0.0.1   example.local

httpd.conf構成(仮想ホストを有効化)

ファイル:/XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

httpd-vhosts.confの構成

ファイル:XAMPP / etc / extra / httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    DocumentRoot "/path_to_XAMPP/htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs/example.local-error_log"
#    CustomLog "logs/example.local-access_log" common
</VirtualHost>

Apacheを再起動します

pacファイルを作成します。

任意の場所にwhatever.pacとして保存し、ブラウザのネットワーク>プロキシ>自動構成設定にファイルをロードします(これを変更した場合はリロードします)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

2

dnsmasqは、いくつかの追加手順を実行する必要があることを除いて、私のために機能しました。

完全な手順は次のとおりです。

  1. /etc/resolv.conf次の行を先頭に追加

    nameserver 127.0.0.1
    
  2. 次の行を追加します /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. dnsmasqを再起動します


ディストリビューションがネットプランを使用している場合は機能しません(ubuntu 18.04私はあなたを見ています)
MrMesees
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.