Вопрос

Я хочу настроить свою локальную машину разработки так, чтобы любые запросы на *.local перенаправляются на localhost.Идея состоит в том, что, разрабатывая несколько сайтов, я могу просто добавлять виртуальные хосты в 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-сервер или что-то сложное, есть какие-нибудь предложения?

Это было полезно?

Решение

Acrylic DNS Proxy (бесплатный, с открытым исходным кодом) справляется со своей задачей.Он создает прокси-DNS-сервер (на вашем компьютере) со своим собственным файлом хостов.Файл хостов принимает подстановочные знаки.

Скачать с официального сайта

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

Настройка акрилового DNS-прокси

Чтобы настроить Acrylic DNS Proxy, установите его по ссылке выше, а затем перейдите по ссылке:

  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. Перезапустите службу Acrylic.

Вам также потребуется изменить настройки DNS в настройках сетевого интерфейса:

  1. Начинать
  2. Панель управления
  3. Сеть и Интернет
  4. Сетевые соединения
  5. Свойства подключения по локальной сети
  6. TCP/IPv4

Установите «Использовать следующий адрес DNS-сервера»:

Preferred DNS Server: 127.0.0.1

Если вы затем объедините этот ответ с ответом Джеремяснидера (используя VirtualDocumentRoot) затем вы можете автоматически настроить домены/виртуальные хосты, просто создав каталог.

Другие советы

Чтобы ответить на ваш вопрос, вы не можете использовать подстановочные знаки в файле хостов под 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 est и поместите туда необходимые файлы, и все просто заработает.

Другой вариант — использовать <Directory> теги в apache.conf и ссылаться на страницы из http://локальный хост/проект/.

Я не думаю, что это возможно.

В любом случае вам придется изменять записи виртуального корня Apache каждый раз, когда вы добавляете новый сайт и местоположение, поэтому синхронизировать новое имя с файлом vhost Windows не составляет большого труда.

Обновлять:пожалуйста, проверьте следующий ответ и комментарии к этому ответу.Этому ответу 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

(Возможность указывать адреса без обратной связи отлично подходит для тестирования сайтов на устройствах iOS, где вы не можете получить доступ к файлу хостов.)

Если вы объедините это с некоторыми конфигурациями Apache, упомянутыми в других ответах, вы потенциально можете добавить VirtualHosts с помощью нулевая настройка.

Я нашел сообщение о Использование файла хостов Windows там также говорится: «Подстановочные знаки не допускаются».

Раньше я просто добавлял дополнительные записи в файл хостов, потому что (как было сказано ранее) это не такая уж дополнительная работа, когда вы уже редактируете файл конфигурации Apache.

Редактирование файла хостов становится менее болезненным, если вы запускаете «ipconfig /flushdns» из командной строки Windows вместо перезагрузки компьютера.

Вы можете уговорить своего сетевого администратора настроить для вас домен (скажем, «evilpuppetmaster.hell») и разместить там подстановочный знак, чтобы все (*.evilpuppetmaster.hell') разрешалось в ваш IP-адрес.

У нас это работает с использованием подстановочного 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/

Я написал простой DNS-прокси на Python.Он будет читать записи с подстановочными знаками в /etc/hosts.Глянь сюда: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

Я тестировал в Linux и Mac OS X, но еще не в Windows.

Вы можете попробовать AngryHosts, который обеспечивал поддержку подстановочных знаков и регулярных выражений.На самом деле это программа для улучшения и управления файлами хостов.
Дополнительные функции можно увидеть @ http://angryhosts.com/features/

Для этого я использую 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).

Вот и все

Я сделал этот простой инструмент вместо хостов.Поддерживаются регулярные выражения.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 — лучший ответ, и в конце он ссылается на возможность создания нескольких сайтов с использованием Apache, которую @jeremyasnyder описывает немного ниже...

...однако в нашем случае мы тестируем мультитенантную хостинговую систему и поэтому большинство домены, которые мы хотим протестировать, относятся к одному и тому же virtualhost, а еще пара других направлена ​​в другое место.

В нашем случае вы просто используете подстановочные знаки регулярных выражений в ServerAlias директива, типа так...

ServerAlias *.foo.local

Вот общая конфигурация для тех, кто пытается достичь цели (подстановочные знаки в среде разработки, т. е. XAMPP — в этом примере предполагается, что все сайты указывают на одну и ту же кодовую базу).

файл хостов (добавить запись)

файл:%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 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>

перезапустить апач

создать pac-файл:

сохраните как файл What.pac, где хотите, а затем загрузите файл в настройках сети> прокси> 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, теперь вы можете использовать доменное имя xyz.192-168-1-100.local, которое всегда будет разрешаться в 192.168.1.100.Эту магию делает echoipdns, просматривая IP-адрес во второй части доменного имени и возвращая тот же IP-адрес в DNS-запросе.Вам придется запустить echoipdns на компьютере, с которого вы хотите получить доступ к удаленной системе.

echoipdns также можно настроить как автономный DNS-прокси, поэтому, просто указав на этот DNS, вы теперь можете использовать все вышеперечисленные преимущества, не запуская каждый раз специальную команду, и даже можете использовать его с мобильных устройств.

По сути, это упрощает разработку DNS на основе домена с подстановочными знаками как для локальной, так и для групповой среды.

echoipdns работает на Mac, Linux и Windows.

ПРИМЕЧАНИЕ:Я автор echoipdns.

Конфигурация автоматического поддомена конфигурации nginx с акриловым DNS-прокси

файл 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.$филиал - имя вашего субдомена.

Установить вместо корень /var/www/html/$branch/public; путь вашего проекта

Вы можете использовать динамический DNS-клиент, например http://www.no-ip.com.Затем с помощью внешнего DNS-сервера CNAME *.mydomain.com на mydomain.no-ip.com.

Хотя вы не можете добавить такой подстановочный знак, вы можете добавить полный список сайтов, которые вам нужны, по крайней мере для тестирования, который для меня работает достаточно хорошо, в файле хостов, вы просто добавляете:

127.0.0.1 сайт1.локальный
127.0.0.1 сайт2.локальный
127.0.0.1 сайт3.локальный
...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top