Назад | Перейти на главную страницу

WAMP разные сайты на разных портах, доступных в локальной сети

У меня есть небольшой сервер Windows, настроенный в локальной сети, со статическим IP-адресом 192.168.1.100. У меня есть несколько других клиентских машин, скажем 192.168.1.101-104.

Требования:

Моя текущая настройка выглядит следующим образом:

httpd.conf:

ServerRoot "c:/wamp/bin/apache/apache2.2.22"

Listen 8080
Listen 8081

ServerAdmin admin@localhost
ServerName localhost:8080
DocumentRoot "c:/wamp/www/"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "c:/wamp/www">
    Options Indexes FollowSymLinks
    AllowOverride all
     Order deny,allow
     Deny from all
     Allow from 192.168.1
</Directory>

<Directory "c:/site1">
    Options Indexes FollowSymLinks
    AllowOverride None
     Order deny,allow
     Deny from all
     Allow from 192.168.1
</Directory>

<Directory "cgi-bin">
    AllowOverride None
    Options None
     Order deny,allow
     Deny from all
     Allow from 192.168.1
</Directory>

httpd-vhosts.conf:

Listen 8080
Listen 8081

NameVirtualHost *:8080
NameVirtualHost *:8081

<VirtualHost *:8080>
    ServerName localhost
    DocumentRoot c:/wamp/www
</VirtualHost>

<VirtualHost *:8081>
    ServerName site1
    DocumentRoot c:/site1
</VirtualHost>

Проблема теперь в том, что поведение не совсем то, что мне нужно.

Текущее поведение на сервере:

Текущее поведение на клиентских машинах:

Что я делаю не так?

Я думаю, проблема в виртуальном хостинге, основанном на вашем имени. Вы сказали ему через директиву ServerName, что его имя хоста - «site1», тогда как на самом деле они оба - localhost. Не используйте виртуальный хостинг на основе имени, просто позвольте ему выбирать порт.

Удалите все строки NameVirtualHost и ServerName из httpd-vhosts.conf.

Возможно, здесь будет полезно объяснение того, как работают виртуальные хосты с именами.

Когда браузер отправляет запрос на 192.168.1.100:8081, он подключается к 192.168.1.100. порт 8081, и впоследствии он отправит HTTP-запрос. Это выглядит (упрощенно) примерно так:

host: 192.168.1.100

GET /

Теперь Apache нужно выяснить, с какого виртуального хоста он будет обслуживать ответ. Он делает это, просматривая пару IP: Port, и если для пары IP: Port существует оператор NamevirtualHost, он также смотрит на host: заголовок. Здесь важно знать, что если вы вызываете сайт по IP, host:заголовок будет содержать IP-адрес, а не имя хоста. Вам необходимо использовать имена (и они должны правильно разрешаться в правильный ip).

Если Apache не может найти виртуальный хост, соответствующий комбинации IP: Port: Host, по умолчанию используется первый раздел VirtualHost. И вот что здесь происходит. Просто поменяйте местами свои две секции и посмотрите, что произойдет ...

Вам нужно прекратить вводить в заблуждение apache путем смешивания именованных виртуальных хостов и виртуальных хостов на основе портов. Другими словами, вам нужно удалить NameVirtualHostдирективы. Они тебе не нужны.

И последнее замечание: если цель состоит в том, чтобы заблокировать всех, кроме самого сервера, в каталоге wamp, вам также нужно изменить что-то еще в своей конфигурации:

<Directory "c:/wamp/www">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
    Allow from 192.168.1.100
</Directory>

Таким образом, только сервер сможет увидеть этот каталог ...