Ich möchte meinen lokalen Entwicklungscomputer so einrichten, dass alle Anforderungen für *.local
an localhost
umgeleitet werden. Die Idee ist, dass ich, während ich mehrere Sites entwickle, einfach Apache mit dem Namen site1.local
, site2.local
etc hinzufügen und sie alle in localhost
auflösen lassen, während Apache entsprechend eine andere Site bedient.
Ich bin unter Windows XP.
Ich habe versucht, etwas hinzuzufügen
127.0.0.1 *.local
zu meiner c:\windows\system32\drivers\etc\hosts
-Datei, auch versucht:
127.0.0.1 .local
Keiner von denen scheint zu funktionieren.
Ich weiß, dass ich sie für verschiedene Portnummern einrichten kann, aber das ist ein Schmerz, da es schwer ist, sich zu merken, welcher Port welcher ist.
Ich möchte keinen lokalen DNS-Server einrichten oder etwas hartes, irgendwelche Vorschläge?
Acrylic DNS Proxy (kostenlos, Open Source) erledigt die Arbeit. Es erstellt einen Proxy-DNS-Server (auf Ihrem eigenen Computer) mit seiner eigenen Hosts-Datei. Die hosts-Datei akzeptiert Platzhalter.
Download von der offiziellen Website
http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home
Um den Acrylic DNS Proxy zu konfigurieren, installieren Sie ihn über den obigen Link und gehen Sie zu:
Füge die folgenden Zeilen am Ende der Datei hinzu:
127.0.0.1 *.localhost
127.0.0.1 *.local
127.0.0.1 *.lc
Starten Sie den Acrylic DNS Proxy-Dienst neu:
Sie müssen auch Ihre DNS-Einstellung in den Einstellungen der Netzwerkschnittstelle anpassen:
Set "Folgende DNS-Serveradresse verwenden":
Preferred DNS Server: 127.0.0.1
Wenn Sie diese Antwort dann mit der Antwort von jeremyasnyder kombinieren (mithilfe von VirtualDocumentRoot
), können Sie Domänen/virtuelle Hosts automatisch einrichten, indem Sie einfach ein Verzeichnis erstellen.
Um Ihre Frage zu beantworten, können Sie in der hosts-Datei unter Windows keine Platzhalter verwenden.
Wenn Sie jedoch nur die hosts-Datei ändern möchten, damit neue Sites funktionieren, können Sie Ihren Apache so konfigurieren und müssen nicht weiter bearbeiten, sondern die config:
http://postpostmodern.com/instructional/a-smarter-mamp/
Grundsätzlich eine kurze Zusammenfassung basierend auf meinem Setup. Fügen Sie Ihrer Apache.conf-Datei Folgendes hinzu:
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>
Dadurch kann ich einen Eintrag hinzufügen wie:
127.0.0.1 test.dev
und dann das Verzeichnis c:\xampp\sites\dev\test erstellen und die erforderlichen Dateien dort ablegen, und es funktioniert einfach.
Die andere Option ist, <Directory>
-Tags in Apache.conf zu verwenden und auf die Seiten von http: // localhost/project/ zu verweisen.
Ich denke nicht, dass es möglich ist.
Sie müssen die Apache Virtualroot-Einträge trotzdem jedes Mal ändern, wenn Sie eine neue Site und einen neuen Standort hinzufügen. Es ist daher keine große Aufgabe, den neuen Namen in die Windows-vhost-Datei zu synchronisieren.
Update: Bitte überprüfen Sie die nächste Antwort und die Kommentare zu dieser Antwort. Diese Antwort ist 6 Jahre alt und nicht mehr richtig.
Das Bearbeiten der hosts-Datei ist weniger schmerzhaft, wenn Sie "ipconfig/flushdns" über die Windows-Eingabeaufforderung ausführen, anstatt den Computer neu zu starten.
Um die großartigen Vorschläge hier hinzuzufügen, ist XIP.IO ein fantastischer Platzhalter-DNS-Server, der öffentlich verfügbar ist.
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
(Die Möglichkeit, Nicht-Loopback-Adressen anzugeben, ist ideal für das Testen von Sites auf iOS-Geräten, an denen Sie nicht auf eine Hosts-Datei zugreifen können.)
Wenn Sie dies mit einigen der in anderen Antworten erwähnten Apache-Konfigurationen kombinieren, können Sie VirtualHosts möglicherweise mit Nullstellen hinzufügen.
Ich habe ein Posting zu Using the Windows Hosts File gefunden, das auch sagt "Keine Platzhalter sind erlaubt."
In der Vergangenheit habe ich nur die zusätzlichen Einträge zur hosts-Datei hinzugefügt, da (wie bereits gesagt) keine zusätzliche Arbeit erforderlich ist, wenn Sie bereits die Apache-Konfigurationsdatei bearbeiten.
Wir arbeiten mit einem Wildcard-DNS in unserem lokalen DNS-Server: Fügen Sie einen A
-Eintrag hinzu, etwa *.local -> 127.0.0.1
Ich denke, dass Ihre Netzwerkeinstellungen das gewählte Domänensuffix in der Domänensuffix-Suchliste für Computer im Netzwerk enthalten müssen. Daher möchten Sie .local
durch die interne Domäne Ihres Unternehmens (z. B. .int
) ersetzen und dann eine Subdomain wie .localhost.int
hinzufügen machen Sie klar, wofür es ist.
So würde *.localhost.int
für jeden im Netzwerk zu 127.0.0.1
aufgelöst werden, und die Konfigurationsdateieinstellungen für alle Entwickler würden "einfach funktionieren", wenn Endpunkte von dieser Subdomäne abhängen, z. site1.localhost.int
, site2.localhost.int
Dies ist so ziemlich das Schema, das wir eingeführt haben.
dnsmasq sieht auch nett aus, aber ich habe es noch nicht ausprobiert: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/
Sie könnten Ihren Netzwerkadministrator überreden, eine Domäne für Sie einzurichten (sagen Sie "evilpuppetmaster.hell") und die Wildcard dort zu haben, damit sich alles (* .evilpuppetmaster.hell ') in Ihre IP auflöst
Ich habe einen einfachen DNS-Proxy in Python geschrieben. Es werden Platzhalter-Einträge in/etc/hosts gelesen. Siehe hier: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py
Ich habe unter Linux und Mac OS X getestet, aber noch nicht unter Windows.
Ich habe dieses einfache Werkzeug entwickelt, um die Gastgeber zu ersetzen. Reguläre Ausdrücke werden unterstützt . https://github.com/stackia/DNSAgent
Eine Beispielkonfiguration:
[
{
"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"
}
]
Möglicherweise versuchen Sie AngryHosts , mit dem Sie Platzhalter und reguläre Ausdrücke unterstützen können. Tatsächlich handelt es sich um eine Software zum Verbessern und Verwalten von Dateien für Hosts.
Weitere Funktionen finden Sie unter @ http://angryhosts.com/features/
Ich verwende dazu DNSChef.
https://thesprawl.org/projects/dnschef/
Sie müssen die App herunterladen, unter Linux oder Mac benötigen Sie Python, um sie auszuführen. Windows hat ein eigenes Exe.
Sie müssen beispielsweise eine Ini-Datei mit Ihren DNS-Einträgen erstellen
[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3
Dann müssen Sie die DNS-Anwendung mit Administratorrechten starten
Sudo python dnschef.py --file myfile.ini -q
oder in Fenstern
runas dnschef.exe --file myfile.ini -q
Schließlich müssen Sie als einzige DNS-Umgebung Ihre lokale Host-Umgebung (Netzwerk, Schnittstelle, DNS oder ähnliches oder in Linux /etc/resolv.conf) einrichten.
Das ist es
@petah und Acrylic DNS Proxy ist die beste Antwort, und am Ende verweist er auf die Möglichkeit, mehrere Sites mit einem Apache zu erstellen, den @jeremyasnyder etwas weiter unten beschreibt ...
In unserem Fall testen wir jedoch ein Multi-Tenant-Hosting-System, und so die meisten Domains, die wir testen möchten, gehen Sie zu derselben virtualhost
, während ein paar andere an einen anderen Ort geleitet werden.
In unserem Fall verwenden Sie also einfach Regex-Platzhalter in der ServerAlias
-Direktive, wie so ...
ServerAlias *.foo.local
Ich konnte kein schriftliches Verbot finden, aber die Windows-Hosts-Datei folgt der UNIX-Hosts-Datei, und Sie können keine Platzhalter-Hostnamen-Referenzen in diese Datei einfügen.
Wenn Sie die Manpage lesen, heißt es:
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
Obwohl es sagt,
Host names may contain any printable character other than a field delim-
iter, newline, or comment character.
das ist aus praktischer ebene nicht wahr.
Grundsätzlich unterstützt der Code, der die Datei/etc/hosts betrachtet, keinen Platzhaltereintrag.
Die Problemumgehung besteht darin, alle Einträge im Voraus zu erstellen. Verwenden Sie ein Skript, um mehrere hundert Einträge auf einmal zu platzieren.
Konfiguration für die automatische Subdomäne von nginx config mit Acrylic DNS Proxy
auto.conf -Datei für Ihren Nginx-Sites-Ordner
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;
}
}
Fügen Sie zur Acrylic-Hosts-Datei 127.0.0.1 example.com *.example.com
hinzu und starten Sie den Acrylic-Dienst . $ branch - Ihren Subdomainnamen neu.
Statt root/var/www/html/$ branch/public setzen; Ihren Projektpfad
Hier ist die Gesamtkonfiguration für alle, die versuchen, das Ziel zu erreichen (Platzhalter in der dev-Umgebung, z. B. XAMPP - in diesem Beispiel werden alle Websites verwendet, die auf dieselbe Codebase zeigen)
datei:% SystemRoot%\system32\drivers\etc\hosts
127.0.0.1 example.local
datei:\XAMPP\etc\httpd.conf
# Virtual hosts
Include etc\extra\httpd-vhosts.conf
datei: 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 neu starten
speichern Sie die Datei „which.pac“, wo immer Sie möchten, und laden Sie die Datei anschließend in das Netzwerk des Browsers> Proxy> Auto_Configuration-Einstellungen.
function FindProxyForURL(url, Host) {
if (shExpMatch(Host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
Sie können echoipdns dafür verwenden ( https://github.com/zapty/echoipdns ).
Durch Ausführen von echoipdns local
werden alle Anforderungen für .local-Unterdomänen zu 127.0.0.1 umgeleitet, sodass sich jede Domäne mit xyz.local usw. in 127.0.0.1 auflöst. Sie können jedes andere Suffix auch verwenden, indem Sie local einfach mit dem gewünschten Namen ersetzen.
Echoipdns ist noch leistungsfähiger. Wenn Sie Ihre URL von anderen Computern im Netzwerk verwenden möchten, können Sie sie auch ohne Konfiguration verwenden.
Für z. Wenn die IP-Adresse Ihres Computers 192.168.1.100 ist, können Sie jetzt den Domänennamen xyz.192-168-1-100.local verwenden, der immer in 192.168.1.100 aufgelöst wird. Dies geschieht durch die Echoipdns, indem die IP-Adresse im zweiten Teil des Domainnamens betrachtet und dieselbe DNS-Adresse zurückgegeben wird. Sie müssen die Echoipdns auf dem Computer ausführen, von dem aus Sie auf das Remote-System zugreifen möchten.
echoipdns kann auch als eigenständiger DNS-Proxy eingerichtet werden. Wenn Sie also nur auf diesen DNS-Server verweisen, können Sie jetzt alle oben genannten Vorteile nutzen, ohne jedes Mal einen speziellen Befehl ausführen zu müssen, und Sie können ihn sogar von mobilen Geräten verwenden.
Dies vereinfacht also im Wesentlichen die auf Wildcards basierende DNS-Entwicklung für die lokale Umgebung sowie die Teamumgebung.
echoipdns funktioniert auf Mac, Linux und Windows.
HINWEIS: Ich bin Autor für Echoipdns.