6

У меня есть доменное имя, которое связано с моим IP-адресом дома. Тем не менее, я хочу использовать один и тот же сервер / IP для отображения более одного веб-сайта.

Я не могу заставить виртуальные хосты работать.

Мой conf.d/virtual.conf это:

NameVirtualHost 192.168.10.151:80

Мои сайты доступны /www.mydomain.com это:

Listen 80
<VirtualHost *>
        ServerAdmin     admin@mydomain.com
        ServerName      www.mydomain.com
        ServerAlias     mydomain.com

        #Indexes and Directory Root
        DirectoryIndex  index.html index.php
        DocumentRoot    /media/BigDisk/www/www.mydomain.com/

        # Log Files
        ErrorLog        /media/BigDisk/www/www.mydomain.com/logs/error.log
        CustomLog       /media/BigDisk/www/www.mydomain.com/logs/access.log combined
</VirtualHost>

И сайт был активирован с использованием a2ensite и apache перезагружен без каких-либо предупреждений или ошибок, но когда я захожу на www.mydomain.com я ничего не получаю («Оппс! Не удалось подключиться к Google Chrome ... »).

Что я делаю неправильно?

Обновление: перезапуск Apache приводит к этому:

malfist@webhost:~$ sudo /etc/init.d/apache2 restart
[sudo] password for malfist:
 * Restarting web server apache2                                                                                                                       apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost 192.168.10.151:80 has no VirtualHosts
[Thu Sep 01 12:16:22 2011] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

3 ответа3

5

Проверьте разрешение имени

Сначала используйте nslookup или dig или host чтобы проверить, что www.mydomain.com указывает на статический внешний IP-адрес вашего маршрутизатора.

Проверьте настройки маршрутизатора

Затем убедитесь, что на маршрутизаторе настроена переадресация портов, чтобы запросы, поступающие на порт 80 внешнего интерфейса, переадресовывались на порт 80 с частного IP-адреса вашего сервера.

Проверьте ограничения интернет-провайдера

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

LAN!= Интернет

И наконец, помните, что если вы тестируете это из своей локальной сети, вам нужен другой IP-адрес для www.mydomain.com, вы можете добавить 192.168.10.151 www.mydomain.com в файл hosts (например, /etc/hosts или C:\WINDOWS\system32\drivers\etc\hosts). Как отметил Малфист в комментарии: если маршрутизатор поддерживает NAT-отражение, в этом нет необходимости.


Обновить:

Проверьте журналы ошибок Apache (все они)

"Не удалось подключиться" указывает на базовую проблему с IP-подключением, а не на проблему конфигурации Apache vhost. Последнее, скорее всего, приведет к HTTP-ответу 404 или 500. Если запрос дошел до Apache, вы должны увидеть запись в журнале ошибок. Если там нет записи, это хороший индикатор того, что Apache не получает никакого запроса.

Следите за предупреждениями и ошибками, о которых сообщает Apache

NameVirtualHost *:80 не имеет виртуальных хостов

Смотрите общие неправильные конфигурации

Несколько строк NameVirtualHost приведут к предупреждению «NameVirtualHost *:80 не имеет виртуальных хостов». Apache будет игнорировать вторую директиву и использовать первую определенную строку NameVirtualHost. Похоже, это происходит, когда вы используете несколько файлов конфигурации виртуального хоста и не понимаете, что вам нужно определить конкретную строку NameVirtualHost только один раз. Как и выше, это может происходить в файле debian ports.conf, особенно после обновления.

Адрес уже используется: make_sock: невозможно привязать к адресу 0.0.0.0:80

Некоторые другие программы уже прослушивают порт 80. Используйте netstat -anp чтобы узнать что, затем остановите это.

Диагностические инструменты

Ethernet Sniffer

Я бы использовал сетевой сниффер (например, tcpdump или wireshark) на сервере Apache, чтобы увидеть, какие входящие HTTP-запросы приходят - если их нет, то вы знаете, что это проблема с IP-подключением.


Обновление 2:

Wget

Другой хороший диагностический инструмент - запустить это на сервере.

 wget --header="Host: www.mydomain.com" -O - http://localhost

Это вид вывода, который вы должны увидеть

[root@mybox logs]# wget --header="Host: foo.bar" -O - http://localhost
--2011-09-01 18:56:08--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 125 [text/html]
Saving to: `STDOUT'

 0% [                                       ] 0           --.-K/s              <html>
 <head>
  <title>mybox</title>
 </head>
 <body>
  <h1>mybox</h1>
  <p>Nothing to see, move along</p>
 </body>
</html>
100%[======================================>] 125         --.-K/s   in 0s

2011-09-01 18:56:08 (10.8 MB/s) - `-' saved [125/125]

[root@mybox logs]# tail -n 1 access_log
127.0.0.1 - - [01/Sep/2011:18:56:08 +0100] "GET / HTTP/1.0" 200 125 "-" "Wget/1.11.4 Red Hat modified"

Добавьте параметр -S в wget чтобы увидеть заголовки ответа сервера.

Если вы получили что-то вроде "отказано в соединении", Apache не прослушивает порт 80.

Netstat

Вывод из netstat -anp должен включать

tcp        0      0 :::80        :::*       LISTEN      12345/httpd
1

Я потратил часы на это, и все, что мне нужно было сделать, это освободить мой IP-адрес ifconfig eth0. Он стал статичным, теперь он распознает мое имя виртуального хоста.

1
NameVirtualHost  *:80

Это находится в /etc/apache2/ports.conf . Если вы удалите его или закомментируете его и перезапустите Apache, предупреждение исчезнет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .