web-dev-qa-db-ja.com

Windowsホストファイルのワイルドカード

*.localに対する要求がlocalhostにリダイレクトされるように、ローカル開発マシンをセットアップしたい。複数のサイトを開発するときに、site1.localsite2.localなどと呼ばれるvhostをApacheに追加し、それらをすべてlocalhostに解決し、Apacheがそれに応じて異なるサイトにサービスを提供できるようにするという考え方です。

Windows XPを使用しています。

追加してみた

127.0.0.1       *.local

私のc:\windows\system32\drivers\etc\hostsファイルにも、試しました:

127.0.0.1       .local

どちらも機能していないようです。

別のポート番号に設定できることは知っていますが、どのポートがどのポートであるかを覚えるのが難しいので、それは苦痛です。

ローカルDNSサーバーをセットアップする必要はありませんか?

277

アクリルDNSプロキシ(無料のオープンソース)が仕事をしています。独自のhostsファイルを使用して、プロキシDNSサーバーを(独自のコンピューター上に)作成します。 hostsファイルはワイルドカードを受け入れます。

公式ウェブサイトからダウンロード

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

アクリルDNSプロキシの構成

アクリルDNSプロキシを設定するには、上記のリンクからインストールしてから、に移動します

  1. 開始
  2. プログラム
  3. アクリルDNSプロキシ
  4. 構成
  5. カスタムホストファイルの編集(AcrylicHosts.txt)

ファイルの最後に次の行を追加します:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Acrylic DNS Proxyサービスを再起動します:

  1. 開始
  2. プログラム
  3. アクリルDNSプロキシ
  4. 構成
  5. アクリルサービスを再起動

また、ネットワークインターフェイス設定でDNS設定を調整する必要があります:

  1. 開始
  2. コントロールパネル
  3. ネットワークとインターネット
  4. ネットワーク接続
  5. ローカルエリア接続のプロパティ
  6. TCP/IPv4

「次のDNSサーバーアドレスを使用する」を設定します:

Preferred DNS Server: 127.0.0.1

この回答とjeremyasnyderの回答を組み合わせた場合(VirtualDocumentRootを使用)、ディレクトリを作成するだけでドメイン/仮想ホストを自動的にセットアップできます。

412
Petah

質問に答えるために、Windowsのhostsファイルでワイルドカードを使用することはできません。

ただし、hostsファイルを変更して新しいサイトを機能させるだけの場合は、次のようにApacheを構成できます。構成を編集し続ける必要はありません。

http://postpostmodern.com/instructional/a-smarter-mamp/

基本的に私の設定に基づいた簡単な要約で、Apache.confファイルに次を追加します。

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

これにより、次のようなエントリを追加できます。

127.0.0.1       test.dev

次に、ディレクトリc:\ xampp\sites\dev\testを作成し、そこに必要なファイルを配置すると、動作します。

もう1つのオプションは、Apache.confで<Directory>タグを使用し、 http:// localhost/project / からページを参照することです。

80
jeremyasnyder

可能だとは思いません。

とにかく、新しいサイトと場所を追加するたびに、Apache virtualrootエントリを変更する必要があるため、新しい名前をWindows vhostファイルに同期させるのは大した作業ではありません。

更新:次の回答とこの回答に関するコメントを確認してください。この答えは6歳であり、もはや正しくありません。

30
Biri

既にここに素晴らしい提案を追加するために、 XIP.IO は公開されている素晴らしいワイルドカードDNSサーバーです。

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(非ループバックアドレスを指定する機能は、hostsファイルにアクセスできないiOSデバイス上のサイトをテストするのに最適です。)

これを他の回答に記載されているApache構成のいくつかと組み合わせると、zero setupでVirtualHostsを追加できる可能性があります。

5
Simon East

コンピューターを再起動する代わりに、Windowsコマンドプロンプトから「ipconfig/flushdns」を実行する場合、hostsファイルの編集はそれほど苦痛ではありません。

4
Joe

Windows Hostsファイルの使用 に「ワイルドカードは許可されていません」という投稿が見つかりました。

(以前に述べたように)既にApache構成ファイルを編集しているときはそれほど余分な作業ではないため、過去にhostsファイルに追加のエントリを追加しました。

4
Kevin Hakanson

ローカルDNSサーバーでワイルドカードDNSを使用してこれを機能させます。*.local -> 127.0.0.1のようなAレコードを追加します

ネットワーク設定には、ネットワーク上のマシンのドメインサフィックス検索リストで選択したドメインサフィックスが必要であるため、.localを会社の内部ドメイン(たとえば.int)に置き換えてから.localhost.intのようなサブドメインを追加する必要があると思います目的を明確にします。

したがって、*.localhost.intはネットワーク上のすべてのユーザーに対して127.0.0.1に解決され、すべての開発者の構成ファイル設定は、エンドポイントがそのサブドメインから外れた場合に「機能する」だけです。 site1.localhost.intsite2.localhost.intこれは、私たちが導入したスキームのほとんどです。

dnsmasqも素敵に見えますが、まだ試していません: http://ihaveabackup.net/2012/06/28/using -wilds-in-the-hosts-file /

3
Matthew Skelton

ネットワーク管理者に連絡して、ドメインを設定し(「evilpuppetmaster.hell」など)、ワイルドカードを使用して、すべて(* .evilpuppetmaster.hell ')がIPに解決されるようにすることができます。

3
Stu Thompson

Pythonで簡単なDNSプロキシを作成しました。/etc/hostsのワイルドカードエントリを読み取ります。こちらをご覧ください: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

LinuxとMac OS Xでテストしましたが、Windowsではまだテストしていません。

2
marlonyao

ホストの代わりにこのシンプルなツールを作成しました。正規表現がサポートされています。 https://github.com/stackia/DNSAgent

サンプル構成:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\\.googlevideo\\.com)|((.*\\.)?(youtube|ytimg)\\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]
2
Stackia

AngryHosts を試すことができます。これは、ワイルドカードと正規表現をサポートする方法を提供します。実際には、これはホストファイル拡張および管理ソフトウェアです。
より多くの機能を見ることができます@ http://angryhosts.com/features/

2
iloahz

私はそれを行うためにDNSChefを使用しています。

https://thesprawl.org/projects/dnschef/

アプリをダウンロードする必要があります。LinuxまたはMacで実行するにはPythonが必要です。 Windowsには独自のexeがあります。

たとえば、dnsエントリを含むiniファイルを作成する必要があります。

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

次に、管理者権限でDNSアプリケーションを起動する必要があります

Sudo python dnschef.py --file myfile.ini -q

または窓の中

runas dnschef.exe --file myfile.ini -q

最後に、ローカルホスト環境(ネットワーク、インターフェイス、DNSなど、またはlinux /etc/resolv.conf内)に唯一のDNSとして設定する必要があります。

それでおしまい

2
casivaagustin

@petahとAcrylic DNS Proxyが最良の答えであり、最後に彼は@jeremyasnyderがもう少し詳しく説明するApacheを使用してマルチサイトを実行する能力に言及しています...

...ただし、このケースでは、マルチテナントホスティングシステムをテストしているため、テストするmostドメインは同じvirtualhostに移動し、他のいくつかは他の場所に転送されます。

したがって、この場合、ServerAliasディレクティブで正規表現ワイルドカードを使用するだけです。

ServerAlias *.foo.local
0
oucil

書面で禁止事項を見つけることはできませんでしたが、慣例により、WindowsのhostsファイルはUNIXのhostsファイルに厳密に従っており、ワイルドカードのホスト名参照をそのファイルに含めることはできません。

マニュアルページを読むと、次のように表示されます。

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each Host a single line should be present with the following
     information:

           Internet address
           Official Host name
           Aliases

とはいえ、

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

それは実際的なレベルからは真実ではありません。

基本的に、/ etc/hostsファイルを調べるコードはワイルドカードエントリをサポートしていません。

回避策は、すべてのエントリを事前に作成することです。スクリプトを使用して、一度に数百のエントリを配置することもできます。

0
benc

アクリルDNSプロキシを使用したnginx config自動サブドメインの構成

nginxサイトフォルダーのauto.confファイル

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Acrylicホストファイル127.0.0.1 example.com *.example.comに追加し、Acrylicサービスを再起動します。 $ branch-サブドメイン名。

代わりにroot/var/www/html/$ branch/public;プロジェクトパスを設定します

0
Davron Achilov

目標を達成しようとする人の全体的な構成は次のとおりです(開発環境のワイルドカード、つまりXAMPP-この例では、同じコードベースを指すすべてのサイトを想定しています)。

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

ファイル:%SystemRoot%\ system32\drivers\etc\hosts

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 [email protected]
    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として保存し、ブラウザのネットワーク>プロキシ> auto_configuration設定にファイルをロードします(これを変更した場合はリロードします)

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
0
Daniel Jordi

これにはechoipdnsを使用できます( https://github.com/zapty/echoipdns )。

echoipdns localを実行すると、.localサブドメインのすべてのリクエストが127.0.0.1にリダイレクトされるため、xyz.localなどのドメインは127.0.0.1に解決されます。他の任意のサフィックスを使用することもできますが、単にlocalを必要な名前に置き換えるだけです。

Echoipdnsはさらに強力です。ネットワーク内の他のマシンからURLを使用する場合、構成なしで使用できます。

たとえばマシンのIPアドレスが192.168.1.100である場合、常に192.168.1.100に解決されるドメイン名xyz.192-168-1-100.localを使用できます。この魔法は、ドメイン名の2番目の部分のIPアドレスを調べ、DNSクエリで同じIPアドレスを返すことにより、echoipdnsによって行われます。リモートシステムにアクセスするマシンでechoipdnsを実行する必要があります。

echoipdnsはスタンドアロンDNSプロキシとしても設定できるため、このDNSをポイントするだけで、毎回特別なコマンドを実行せずに上記のすべての利点を使用できるようになり、モバイルデバイスからも使用できます。

したがって、これにより、ローカル環境とチーム環境のワイルドカードドメインベースのDNS開発が本質的に簡素化されます。

echoipdnsはMac、Linux、およびWindowsで動作します。

注:私はechoipdnsの著者です。

0
arva