Я хочу настроить локальную машину разработки, чтобы любые запросы для *.local
перенаправлялись на localhost
. Идея состоит в том, что при создании нескольких сайтов я могу просто добавить vhosts в Apache, называемые site1.local
, site2.local
и т.д., И разрешить их всем localhost
, в то время как Apache обслуживает другой сайт соответственно.
Я нахожусь в Windows XP.
Я попробовал добавить
127.0.0.1 *.local
в мой файл c:\windows\system32\drivers\etc\hosts
, также попытался:
127.0.0.1 .local
Ни один из них не работает.
Я знаю, что могу настроить их на разные номера портов, но это боль, потому что трудно запомнить, какой именно порт.
Я не хочу настраивать локальный DNS-сервер или что-нибудь тяжелое, любые предложения?
Акриловый DNS-прокси (бесплатный, с открытым исходным кодом) выполняет эту работу. Он создает прокси-сервер DNS (на вашем собственном компьютере) с собственным файлом хостов. Файл hosts принимает подстановочные знаки.
Загрузка с официального сайта
http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home
Чтобы настроить Acrylic DNS Proxy, установите его из приведенной выше ссылки, а затем перейдите по ссылке:
Добавьте следующие строки в конец файла:
127.0.0.1 *.localhost
127.0.0.1 *.local
127.0.0.1 *.lc
Перезапустить службу прокси-сервера Acrylic DNS:
Вам также нужно будет настроить настройку DNS в настройках сетевого интерфейса:
Установите "Использовать следующий адрес DNS-сервера":
Preferred DNS Server: 127.0.0.1
Если вы затем объедините этот ответ с ответом jeremyasnyder (используя VirtualDocumentRoot
), вы можете автоматически настроить домены/виртуальные хосты, просто создав каталог.
Чтобы ответить на ваш вопрос, вы не можете использовать подстановочные знаки в файле hosts под Windows.
Однако, если вы хотите изменить файл хостов, чтобы новые сайты работали... вы можете настроить свой 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 и поместите туда необходимые файлы, и он просто работает.
Другой вариант - использовать теги <Directory>
в apache.conf и ссылаться на страницы из http://localhost/project/.
Я не думаю, что это возможно.
В любом случае вам придется изменять записи виртуального роутера apache каждый раз, когда вы добавляете новый сайт и местоположение, поэтому это не большая работа, чтобы синхронизировать новое имя с файлом vhost Windows.
Обновление: пожалуйста, проверьте следующий ответ и комментарии к этому ответу. Этот ответ исполняется 6 лет и больше не исправляется.
ServerAlias *.mydomain.localhost
, что когда у вас есть многоязычный веб-сайт, у вас может быть <VirtualHost> с ServerAlias *.mydomain.localhost
( *
код языка), так что вам не придется редактировать httpd.conf каждый раз, когда вы добавляете новый язык; но вам все равно нужно добавить поддомен в файл hosts, отсюда и актуальность вопроса выше.
Чтобы добавить к большим предложениям уже здесь, 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
(Возможность указания адресов без обратной связи является фантастикой для тестирования сайтов на устройствах iOS, где вы не можете получить доступ к файлу hosts.)
Если вы объедините это с некоторой конфигурацией Apache, упомянутой в других ответах, вы можете добавить VirtualHosts с нулевой настройкой.
Редактирование файла хостов является меньшим количеством боли, когда вы запускаете "ipconfig/flushdns" из командной строки Windows, вместо перезапуска компьютера.
Я нашел сообщение о Использование файла Windows Hosts File, в котором также говорится: "Символы не допускаются".
В прошлом я только что добавил дополнительные записи в файл hosts, потому что (как уже говорилось ранее), это не так много дополнительной работы, когда вы уже редактируете конфигурационный файл apache.
У нас есть работа с использованием подстановочных DNS на нашем локальном DNS-сервере: добавьте A
запись как-то вроде *.local -> 127.0.0.1
Я думаю, что ваши сетевые настройки должны будут иметь выбранный суффикс домена в списке поиска суффикса домена для компьютеров в сети, поэтому вы можете заменить .local
на внутренний домен вашей компании (например, .int
) и затем добавьте подобъект, например .localhost.int
, чтобы он понял, для чего он нужен.
Итак, *.localhost.int
будет разрешено для 127.0.0.1
для всех в сети, а настройки файла конфигурации для всех разработчиков будут "просто работать", если конечные точки будут отвисеть от этого субдомена, например. site1.localhost.int
, site2.localhost.int
Это в значительной степени схема, которую мы ввели.
dnsmasq тоже выглядит неплохо, но я еще не пробовал: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/
Вы могли бы поговорить с вашим сетевым администратором о создании домена для вас (скажем, "evilpuppetmaster.hell" ) и иметь подстановочный знак, чтобы все (*.evilpuppetmaster.hell) разрешало ваш IP
Я сделал этот простой инструмент, чтобы занять место хозяев. Поддерживаются регулярные выражения. 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"
}
]
Я использую DNSChef для этого.
https://thesprawl.org/projects/dnschef/
Вам нужно загрузить приложение, в Linux или Mac вам понадобится python для его запуска. Windows имеет свой собственный exe.
Вы должны создать ini файл с вашими записями DNS, например
[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 свою локальную среду хоста (сеть, интерфейс, dns или аналогичный или в linux/etc/resolv.conf).
Что он
Вы можете попробовать AngryHosts, который предоставил способ поддержки подстановочных знаков и регулярных выражений. На самом деле это программное обеспечение для улучшения и управления файлами хостов.
Дополнительные функции можно увидеть @http://angryhosts.com/features/
Я написал простой прокси dns в Python. Он будет читать подстановочные записи в /etc/hosts. См. Здесь: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py
Я тестировал в Linux и Mac OS X, но еще не в Windows.
Конфигурация автоматического субдомена config nginx с помощью Acrylic DNS Proxy
файл auto.conf для вашей папки сайтов nginx
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; путь вашего проекта
Вы можете использовать echoipdns для этого (https://github.com/zapty/echoipdns).
Запустив echoipdns local
, все запросы для .local subdomains перенаправляются на 127.0.0.1, поэтому любой домен с xyz.local и т.д. разрешит 127.0.0.1. Вы можете использовать любой другой суффикс, а также просто заменить локальное имя, которое вы хотите.
Echoipdns еще более эффективен, если вы хотите использовать свой url с других компьютеров в сети, вы все равно можете использовать его с нулевой конфигурацией.
Например, Если ваш IP-адрес устройства равен 192.168.1.100, теперь вы можете использовать доменное имя xyz.192-168-1-100.local, которое всегда будет разрешено для 192.168.1.100. Эта магия выполняется echoipdns, если посмотреть на ip-адрес во второй части имени домена и вернуть тот же IP-адрес в DNS-запросе. Вам нужно будет запустить echoipdns на компьютере, с которого вы хотите получить доступ к удаленной системе.
echoipdns также может быть настроен как автономный прокси DNS, поэтому, просто указывая на этот DNS, вы можете теперь использовать все вышеупомянутые преимущества, не запуская специальную команду каждый раз, и вы даже можете использовать ее с мобильных устройств.
Таким образом, по существу это упрощает разработку DNS на основе подстановочных доменов для локальной и командной среды.
echoipdns работает на Mac, Linux и Windows.
ПРИМЕЧАНИЕ. Я автор для echoipdns.
Вот общая конфигурация для тех, кто пытается достичь цели (подстановочные знаки в среде dev, т.е. XAMPP - этот пример предполагает, что все сайты указывают на одну и ту же базу кода)
файл:% SystemRoot%\system32\drivers\etc\hosts
127.0.0.1 example.local
file:\XAMPP\etc\httpd.conf
# Virtual hosts
Include etc\extra\httpd-vhosts.conf
file: 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
сохранить как whatever.pac, куда захотите, а затем загрузить файл в сети браузерa > прокси > параметры автоконфигурации (перезагрузите, если вы измените это)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
@petah и Acrylic DNS Proxy - лучший ответ, и в конце он ссылается на способность делать многосайтовый сайт с помощью Apache, который @jeremyasnyder описывает немного дальше...
... однако, в нашем случае мы тестируем многоуровневую систему хостинга, поэтому большинство доменов, которые мы хотим протестировать, переходят к одному и тому же virtualhost
, в то время как пара других направляется в другое место.
Итак, в нашем случае вы просто используете подстановочные символы регулярных выражений в директиве ServerAlias
, например...
ServerAlias *.foo.local
Я не мог найти запрет в письменной форме, но, по соглашению, файл хостов 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, не поддерживает подстановочную запись.
Обходным путем является создание всех записей заблаговременно, возможно, используйте script, чтобы поместить пару сотен записей одновременно.
Пока вы не можете добавить такой шаблон, вы можете добавить полный список необходимых вам сайтов, по крайней мере для тестирования, который достаточно хорошо работает для меня, в вашем файле hosts, вы просто добавляете:
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...
Вы можете использовать динамический DNS-клиент, такой как http://www.no-ip.com. Затем с внешним DNS-сервером CNAME *.mydomain.com на mydomain.no-ip.com.
Возможно, использование apache на многих портах также является альтернативой.