Windowsホストファイルのワイルドカード
-
02-07-2019 - |
質問
*.local
へのリクエストがlocalhost
にリダイレクトされるように、ローカル開発マシンをセットアップしたい。複数のサイトを開発するときに、Apacheにsite1.local
、site2.local
などと呼ばれるvhostsを追加し、それらをすべてc:\windows\system32\drivers\etc\hosts
に解決し、Apacheがそれに応じて別のサイトにサービスを提供できるようにするという考え方です。
Windows XPを使用しています。
追加しようとしました
127.0.0.1 *.local
私の<=>ファイルに、また試しました:
127.0.0.1 .local
どちらも機能していないようです。
別のポート番号に設定できることは知っていますが、どのポートがどのポートであるかを覚えるのが難しいため、これは苦痛です。
ローカルDNSサーバーをセットアップする必要はありません。何か難しいことはありませんか?
解決
アクリルDNSプロキシ(無料のオープンソース)が仕事をします。独自のhostsファイルを使用して、プロキシDNSサーバーを(独自のコンピューターに)作成します。 hostsファイルはワイルドカードを受け入れます。
公式Webサイトからダウンロード
http://mayakron.altervista.org/support/browse.php ?path = Acrylic <!> amp; name = Home
アクリルDNSプロキシの構成
アクリルDNSプロキシを設定するには、上記のリンクからインストールし、次の場所に移動します:
- 開始
- プログラム
- アクリルDNSプロキシ
- 構成
- カスタムホストファイルの編集(AcrylicHosts.txt)
ファイルの最後に次の行を追加します:
127.0.0.1 *.localhost
127.0.0.1 *.local
127.0.0.1 *.lc
アクリルDNSプロキシサービスを再起動します:
- 開始
- プログラム
- アクリリックDNSプロキシ
- 構成
- アクリルサービスの再開
ネットワークインターフェース設定でDNS設定を調整する必要もあります。
- 開始
- コントロールパネル
- ネットワークとインターネット
- ネットワーク接続
- ローカルエリア接続のプロパティ
- TCP / IPv4
Set <!> quot;次のDNSサーバーアドレスを使用<!> quot;:
Preferred DNS Server: 127.0.0.1
この回答とjeremyasnyderの回答を組み合わせた場合(VirtualDocumentRoot
を使用)、ディレクトリを作成するだけでドメイン/仮想ホストを自動的にセットアップできます。
他のヒント
質問に答えるために、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を作成し、そこに必要なファイルを配置すると、動作します。
他のオプションは、apache.confで<Directory>
タグを使用し、 http:// localhost / project /からページを参照することです。 。
可能だとは思わない。
とにかく、新しいサイトと場所を追加するたびにapache virtualrootエントリを変更する必要があるため、新しい名前をWindows vhostファイルに同期させるのは大した作業ではありません。
更新:次の回答とこの回答に関するコメントを確認してください。この答えは6年前のもので、もう正しくありません。
すでにここに素晴らしい提案を追加するには、 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構成のいくつかと組み合わせると、潜在的にゼロセットアップでVirtualHostsを追加できます。
Windows Hostsファイルの使用に関する投稿を見つけました。 > quot;ワイルドカードは使用できません。<!> quot;
以前、hostsファイルに追加のエントリを追加しました。これは、(前述のとおり)すでにapache configファイルを編集しているときはそれほど余分な作業ではないからです。
hostsファイルの編集は、<!> quot; ipconfig / flushdns <!> quot;コンピューターを再起動する代わりに、Windowsコマンドプロンプトから。
ネットワーク管理者に連絡して、ドメインを設定し(「evilpuppetmaster.hell」など)、ワイルドカードを使用して、すべて(* .evilpuppetmaster.hell ')がIPに解決されるようにすることができます
これは、ローカルDNSサーバーでワイルドカードDNSを使用して機能します。A
*.local -> 127.0.0.1
レコードを追加します
ネットワーク設定には、ネットワーク上のマシンのドメインサフィックス検索リストで選択したドメインサフィックスが必要であると考えられるため、.local
を会社の内部ドメイン(たとえば.int
)に置き換えて、次に、.localhost.int
などのサブドメインを追加して、目的を明確にします。
したがって、*.localhost.int
はネットワーク上のすべてのユーザーに対して127.0.0.1
に解決され、すべての開発者の構成ファイル設定は<!> quot; just work <!> quot;エンドポイントがそのサブドメインからハングアップする場合site1.localhost.int
、site2.localhost.int
これは、ほとんど導入したスキームです。
dnsmasq も見た目は良いですが、まだ試していません。 http://ihaveabackup.net/2012/06/ 28 / using-wildcards-in-the-hosts-file /
Pythonで簡単なDNSプロキシを作成しました。 / etc / hostsのワイルドカードエントリを読み取ります。こちらをご覧ください: http://code.google。 com / p / marlon-tools / source / browse / tools / dnsproxy / dnsproxy.py
Linuxでテストしました<!> amp; Mac OS X、ただしWindowsではまだ。
AngryHosts を試すことができます。これは、ワイルドカードと正規表現をサポートする方法を提供します。実際には、これはホストファイルの拡張および管理ソフトウェアです。
@ http://angryhosts.com/features/
これを行うために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
またはwindows
runas dnschef.exe --file myfile.ini -q
最後に、ローカルホスト環境(ネットワーク、インターフェイス、dnsなど、またはlinux /etc/resolv.conf内)に唯一のDNSとして設定する必要があります。
それだけです
ホストの代わりにこのシンプルなツールを作成しました。正規表現がサポートされています。 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"
}
]
書面で禁止事項を見つけることはできませんでしたが、慣例により、WindowsホストファイルはUNIXホストファイルに厳密に従っており、そのファイルにワイルドカードホスト名参照を含めることはできません。
マニュアルページを読むと、次のように表示されます。
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ファイルを調べるコードはワイルドカードエントリをサポートしていません。
回避策は、すべてのエントリを事前に作成することです。スクリプトを使用して、一度に数百のエントリを配置することもできます。
@petahとAcrylic DNS Proxyが最良の答えであり、最後に彼は@jeremyasnyderがもう少し詳しく説明しているApacheを使用してマルチサイトを実行する能力について言及しています...
...ただし、今回のケースでは、マルチテナントホスティングシステムをテストしているため、テストするほとんどのドメインは同じvirtualhost
に移動しますが、他のいくつかは他の場所。
したがって、この場合、ServerAlias
ディレクティブで正規表現のワイルドカードを使用するだけです...
ServerAlias *.foo.local
これは、目標を達成しようとする人の全体の構成です(開発環境のワイルドカード、つまりXAMPP-この例では、すべてのサイトが同じコードベースを指していると想定しています)
hostsファイル(エントリを追加)
ファイル:%SystemRoot%\ system32 \ drivers \ etc \ hosts
127.0.0.1 example.local
httpd.conf構成(vhostを有効化)
ファイル:\ 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として任意の場所に保存し、ブラウザのネットワークにファイルをロードします<!> gt; proxy <!> gt; auto_configuration設定(これを変更した場合はリロードします)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
このために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の著者です。
アクリル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;
}
}
アクリルホストファイル127.0.0.1 example.com *.example.com
に追加し、アクリルサービスを再起動します。
$ branch -サブドメイン名。
root / var / www / html / $ branch / publicの代わりに設定します。プロジェクトパス
http://www.no-ip.com 。次に、外部DNSサーバーCNAME * .mydomain.comからmydomain.no-ip.comへ。
そのようなワイルドカードを追加することはできませんが、少なくともテストに必要なサイトの完全なリストを追加することができます。これは、ホストファイルに追加するだけです。
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...