У меня есть небольшой сервер 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>
Я добавил псевдоним на сервере
Псевдоним / site1 / "c: / site1 /"
Параметры Индексы FollowSymLinks MultiViews AllowOverride all Разрешить порядок, запретить Разрешить от всех
Проблема теперь в том, что поведение не совсем то, что мне нужно.
Текущее поведение на сервере:
192.168.1.100:8080
служит мне c:/wamp/www
как и ожидалось192.168.1.100:8081
также служит мне c:/wamp/www
вместо того c:/site1
что я ожидаю 192.168.1.100:8081/site1
служит мне c:/site1
Текущее поведение на клиентских машинах:
site1:8081
(или 192.168.1.100:8081) служит мне c:/wamp/www
на сервере вместо c:/site1
что я ожидаю. Я не хочу, чтобы c: / wamp / www был доступен клиентам.site1:8081/site1
(или 192.168.1.100:8081/site1) служит мне c:/site1
на сервере.Что я делаю не так?
Я думаю, проблема в виртуальном хостинге, основанном на вашем имени. Вы сказали ему через директиву 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>
Таким образом, только сервер сможет увидеть этот каталог ...