Виртуальный хост WAMP не работает

Я использую версию Wamp 2.5 Мой Apache - 2.4.9 PHP: 5.5.12 MySQL: 5.6.17

У меня есть следующие конфигурации:

На моем httpd.conf

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

На моем G:\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhost.conf

# Virtual Hosts
#
# Required modules: mod_log_config

# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#


#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#


<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "g:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "g:/Apache24/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "g:/wamp/www"
    ServerName localhost
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "g:\wamp\www\mysite\public"
    ServerName mysite.dev
</VirtualHost>

На моем c:\Windows\System32\Drivers\etc\hosts

# localhost name resolution is handled within DNS itself.
127.0.0.1   localhost
127.0.0.1   mysite.dev
#   ::1     localhost

Я пытаюсь получить доступ к моему проекту с помощью этого URL-адреса: http://www.mysite.dev/ НО Я получаю Server not found error, я попытался обратиться к нему с помощью www.mysite.dev, http://mysite.dev, но все еще не повезло!

Мой виртуальный хост работал раньше, но я не уверен, почему он не работает сейчас. Некоторые странные вещи продолжаются.

Я не уверен, что происходит. Любые идеи будут высоко оценены!

Спасибо!

Ответ 1

Сначала вам нужно удалить примеры фиктивных определений из вашего файла vhost-httpd.conf. Они приведены только в качестве примеров только для начала работы с синтаксисом и не должны оставаться в активном conf/extra/httpd-vhosts.conf, поскольку они указывают на несуществующие папки.

Поэтому удалите эти 2 определения из файла:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "g:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "g:/Apache24/docs/dummy-host2.example.com"
    ServerName dummy-host2.example.com
    ErrorLog "logs/dummy-host2.example.com-error.log"
    CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>

Второй Apache 2.4.x поддерживает IPV4 (127.0.0.1) и IPV6 (:: 1), поэтому ваш файл hosts должен выглядеть следующим образом с определениями версий IPV4 и IPV6 для каждого сайта. Браузер может произвольно использовать любой из них, поэтому вам понадобятся оба варианта, но, вероятно, он будет использовать сеть IPV6 вместо IPV4, если оба на самом деле активны на вашем компьютере.

127.0.0.1   localhost
::1  localhost

127.0.0.1   mysite.dev
::1  mysite.dev

Теперь на 2 виртуальных хостах, которые действительно существуют в вашей системе, попробуйте это как определение виртуального хоста:

<VirtualHost *:80>
    DocumentRoot "g:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common
    <Directory  "G:/wamp/www">
        AllowOverride All
        Options Indexes FollowSymLinks
        Require local
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "g:\wamp\www\mysite\public"
    ServerName mysite.dev
    ServerAlias www.mysite.dev
    ErrorLog "logs/mysite-error.log"
    CustomLog "logs/mysite-access.log" common
    <Directory  "G:/wamp/www/mysite/public">
        AllowOverride All
        Options Indexes FollowSymLinks
        Require local
    </Directory>
</VirtualHost>

Раздел <Directory>....</Directory> в разделе <VirtualHost>....</VirtualHost> сообщает Apache, с каких IP-адресов ему разрешено принимать соединения, поэтому использование синтаксиса Apache 2.4 Require local ограничивает доступ, так что только ПК, на котором работает WAMPServer, то есть Apache, может подключаться к любой из этих сайтов.

Старайтесь не смешивать синтаксис Apache 2.2 и синтаксис Apache 2.4 вместе в одном определении. Так что не используйте

Order Allow,Deny
Allow from all

и

Require all granted

в том же определении. Вы используете Apache 2.4, поэтому используйте синтаксис Apache 2.4.

Если вы обнаружите, что хотите, чтобы другие ПК в вашей локальной сети могли видеть ваш сайт, например, напарника или детей и т.д., Вы можете добавить этот синтаксис к одному или нескольким определениям вашего виртуального хоста.

Разрешить только один другой компьютер на ваш сайт

Require local
Require ip 192.168.1.100

или 2 других компьютера

Require local
Require ip 192.168.1.100, 192.168.1.101

Или кому-либо в вашей локальной сети просто используйте первые 3 из 4 квартилей IP-адреса.

Require ip 192.168.1

Также избегайте использования синтаксиса, который разрешает доступ откуда угодно, т.е.

Require all granted  <--Apache 2.4 syntax

or 

Order Allow,Deny     <-- Apache 2.2 syntax
Allow from all    

Это может решить ваши проблемы в краткосрочной перспективе, но просто ждет, чтобы поймать вас через некоторое время, когда вы решите, что хотите показать свой сайт другу/клиенту/боссу. Если вы дойдете до стадии "Переадресация портов" своего маршрутизатора, так что мир будет включен в вашу сеть, что сделает ВСЕ ВАШИ САЙТЫ доступными всему миру.

Лучше изменить определение ОДНОГО виртуального хоста для ОДНОГО сайта, который вы хотите, чтобы люди видели для тестирования/хвастовства, с Require local на Require all granted и разрешить доступ к этому единственному сайту только из Интернета.

После внесения всех этих изменений не забудьте перезапустить Apache.

Также, если вы измените файл hosts, чтобы активировать chnages, вы должны либо перезагрузить компьютер, либо запустить их из командной строки командной строки, запущенной с параметром Runs as Administrator.

net stop dnscache
net start dnscache

Если вы используете Windows 10, вышеприведенные команды dns больше не работают, вы должны сделать это вместо этого.

ipconfig /flushdns

Ответ 2

Из-за того, что Google приобретает .dev gTLD, создание сайтов разработки .dev уже невозможно, лучший способ смягчить - просто переименовать домен разработки в .local или что-то, что вы предпочитаете.

Что происходит в фоновом режиме, так это то, что локальный DNS-сервер перенаправляет браузер на 127.0.53.53 (откройте cmd > nslookup yourdomain.dev), чтобы сообщить конечным пользователям .dev gTLD. Поскольку для домена .dev в файле hosts установлено значение 127.0.0.1, он показывает, что соединение отклонено.

Вы можете изменить 127.0.0.1 до 127.0.53.53 в файле hosts и увидеть, что ошибка браузера изменяется с ERR_CONNECTION_REFUSED на ERR_ICANN_NAME_COLLISION.

Ответ 3

Следующее работает для меня

<VirtualHost *:80>
    DocumentRoot "G:\project\test.dev"
    ServerAdmin [email protected]
    ServerName test.dev
    ErrorLog "logs/test.dev-error.log"
    CustomLog "logs/test.dev-access.log" common
    <Directory "G:\project\test.dev">
       AllowOverride All
       Options Indexes FollowSymLinks
       Require local
    </Directory>
</VirtualHost>

Ответ 4

Я исправляю ту же проблему, раскомментируя некоторые строки в httpd.conf в папке Apache.

Раскомментируйте строки ниже:

Include conf/extra/httpd-vhosts.conf
LoadModule vhost_alias_module modules/mod_vhost_alias.so

Сохраните файл и перезагрузите Apache, и он будет работать. Огромное спасибо этому парню: https://john-dugan.com/wamp-vhost-setup/

Ответ 5

Проверьте эти модули без комментирования в httpd.conf

  • proxy_module
  • proxy_http_module

Ответ 6

Я очень поздно подхожу к этому вопросу, я сделал все, что было упомянуто @RiggsFolly, но одна вещь, которую я изменил, заставила его работать мгновенно. Я изменил .dev на .test, так как .dev зарезервирован. надеюсь это поможет

Ответ 7

попробуйте это на вашем файле apache httpd.config:

    <VirtualHost *:80>
      ServerName mysite.dev
      DocumentRoot "g:\wamp\www\mysite\public"
     SetEnv APPLICATION_ENV "development"

     <Directory "g:\wamp\www\mysite\public">
        DirectoryIndex index.php
        Options All Includes Indexes
        Options All Indexes FollowSymLinks 
        Order allow,deny
        Allow from all
        Require all granted
     </Directory>
  </VirtualHost>

перезагрузите ваш сервер wamp и поместите url как mysite.dev/в свой браузер. надеюсь, это поможет вам. спасибо.