Я пытаюсь настроить локальную конфигурацию Apache следующим образом:
http://localhost/
должен служить ~/
http://development.somedomain.co.nz/
должен служить ~/sites/development.somedomain.co.nz/
https://development.assldomain.co.nz/
должен служить ~/sites/development.assldomain.co.nz/
Я хочу разрешить соединения только из нашей локальной сети (диапазон 192.168.1. *) И себя (127.0.0.1).
Я установил свой файл hosts с помощью:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 development.somedomain.co.nz
127.0.0.1 development.assldomain.co.nz
127.0.0.1 development.anunuseddomain.co.nz
Моя конфигурация Apache выглядит так:
Listen 80
NameVirtualHost *:80
<VirtualHost development.somedomain.co.nz:80>
ServerName development.somedomain.co.nz
DocumentRoot "~/sites/development.somedomain.co.nz"
DirectoryIndex index.php
<Directory ~/sites/development.somedomain.co.nz>
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost localhost:80>
DocumentRoot "~/"
ServerName localhost
<Directory "~/">
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<IfModule mod_ssl.c>
Listen *:443
NameVirtualHost *:443
AcceptMutex flock
<VirtualHost development.assldomain.co.nz:443>
ServerName development.assldomain.co.nz
DocumentRoot "~/sites/development.assldomain.co.nz"
DirectoryIndex index.php
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /Applications/XAMPP/etc/ssl.crt/server.crt
SSLCertificateKeyFile /Applications/XAMPP/etc/ssl.key/server.key
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
<Directory ~/sites/development.assldomain.co.nz>
SSLRequireSSL
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
</IfModule>
http://development.somedomain.co.nz/
http://localhost/
и https://development.assldomain.co.nz/
работают нормально.
Проблема в том, когда я прошу http://development.anunuseddomain.co.nz/
или http://development.assldomain.co.nz/
он отвечает так же, как http://development.somedomain.co.nz/
Я хочу, чтобы он отклонял все запросы, которые не соответствуют имени сервера виртуального хоста, и все запросы к хосту https, которые запрашиваются с помощью http
PS Я запускаю XAMPP на Mac OS X 10.5.8
Именованный виртуальный хостинг не поддерживается для виртуальных хостов на основе SSL.
Проблема возникает из-за того, что имя сервера также зашифровано в запросе SSL. Таким образом, когда сервер получает запрос на "somedomainname" или что-то еще, он по умолчанию использует именованный VHost, который не на 443.
Решение:
Исправлено:
# Listen :80
Listen *:80
# Listen on IP Address for :443
Listen 127.0.0.1:443
<VirtualHost development.somedomain.co.nz:80>
ServerName development.somedomain.co.nz
DocumentRoot "~/sites/development.somedomain.co.nz"
DirectoryIndex index.php
# Stay consistent with your syntax definitions. This and the 443 Vhost Directory
# were not Quoted. That's not to say it makes a difference guaranteed,
# but it's always a good habit.
<Directory "~/sites/development.somedomain.co.nz">
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost localhost:80>
ServerName localhost
DocumentRoot "~/"
<Directory "~/">
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<IfModule mod_ssl.c>
# Does this need to exist outside of the VHost Definition ??
AcceptMutex flock
<VirtualHost 127.0.0.1:443>
ServerName development.assldomain.co.nz
DocumentRoot "~/sites/development.assldomain.co.nz"
DirectoryIndex index.php
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /Applications/XAMPP/etc/ssl.crt/server.crt
SSLCertificateKeyFile /Applications/XAMPP/etc/ssl.key/server.key
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
<Directory "~/sites/development.assldomain.co.nz">
SSLRequireSSL
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
</IfModule>
Когда apache не может mactch vhost, он открывает стандартный. Всегда есть значение по умолчанию, если не указано явно, это первое определение vhost в вашем файле конфигурации.
Вы можете использовать httpd -S, чтобы проверить, какие хосты используются по умолчанию.
И вы можете определить по умолчанию и запретить доступ к нему, если хотите, как указывал defraagh
Добавьте VirtualHost по умолчанию в конец файла, чтобы перехватить запросы, направленные на хосты, которые вы явно не указали:
<VirtualHost _default_:*>
DocumentRoot /~/void
...
</VirtualHost>
В директиве вашего виртуального хоста:
<VirtualHost localhost:80>
Вместо этого попробуйте использовать IP.
<VirtualHost 127.0.0.1:80>