2014-02-11 3 views
0

Я вижу интересное поведение с нашими веб-серверами.Apache 2.2 VirtualHosts и несколько портов

Я установил некоторые URL-адреса https с помощью VirtuaHosts Directives и поместил их на нестандартные порты. Я использую порты 4443 и 4543.

Таким образом, просмотр на https://test-domain.com:4443 работает, а также https://test2-domain.com:4543. Однако, если я набираю test-domain2.com:4443 или test-domain.com:4445, который также выводит вас на правильную веб-страницу по порту. (Когда я тестирую, я набираю полную ссылку, переполнение стека не позволит мне ввести более двух, поэтому я удалил часть https: // для вопроса).

В принципе, если вы передаете действительный домен, вы можете поместить его в любой порт, и он доставит вас на сайт, размещенный на этом порту. Я бы подумал, что такое поведение будет невозможно. Я бы подумал, что если бы я набрал домен сайта A с портом сайта B, я бы вернул страницу Not Found или другую страницу с ошибкой, вместо этого меня всегда переводили на сайт B. Его разрешение на все, что размещено в порту.

Если у кого есть какие-либо предложения или известно, что я делаю неправильно, я был бы признателен за ответ или помощь.

Вот конфиг Apache ... я смотрю на онлайновой документации Apache, и я пытался экспериментировать с помощью веб-сервера IP-адрес для NameVirtualHost и VirtualHost и получают такое же поведение

NameVirtualHost *:4443 

<VirtualHost *:4443> 
#SetEnv VHOST "test.domain.com" 
ServerName test.domain.com 
DocumentRoot /var/www/test/public 
SSLEngine on 
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
SSLCertificateFile ssl/test.domain.com.crt 
SSLCertificateKeyFile ssl/test.domain.com.key 
SSLCertificateChainFile ssl/gd_bundle.crt 
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown 

ErrorLog logs/test-error_log 
CustomLog logs/test-access_log common 
</VirtualHost> 


NameVirtualHost *:4543 

<VirtualHost *:4543> 
#SetEnv VHOST "test2.domain.com" 
ServerName test2.domain.com 
DocumentRoot /var/www/test2/public 
SSLEngine on 
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL 
SSLCertificateFile ssl/test2.domain.com.crt 
SSLCertificateKeyFile ssl/test2.domain.com.key 
SSLCertificateChainFile ssl/gd_bundle.crt 
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown 

ErrorLog logs/test2-error_log 
CustomLog logs/test2-access_log common 
</VirtualHost> 

Follow Я попытался добавить следующие разделы: Redirect 404/ ErrorDocument 404 «Нет такого сайта. Проверьте правописание URL. Наш главный сайт: \ http://test1.domain.com/'>http:/ test1.domain.com "

<VirtualHost *:4543> 
Redirect 404/
ErrorDocument 404 "No Such Site. Check the URL spelling. Our main site is \ 
       <a href='http://test2.domain.com/'>http://test2.domain.com" 
</VirtualHost> 

и apachectl -S показывает следующее:

*:4543     is a NameVirtualHost 
default server test2.domain.com (/etc/httpd/conf.d/test.https.conf:76) 
port 4543 namevhost test2.domain.com (/etc/httpd/conf.d/test.https.conf:76) 
port 4543 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.https.conf:92) 
*:4443     is a NameVirtualHost 
default server test1.domain.com (/etc/httpd/conf.d/test.https.conf:51) 
port 4443 namevhost test1.domain.com (/etc/httpd/conf.d/test.https.conf:51) 
port 4443 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.https.conf:68) 
*:443     is a NameVirtualHost 
default server test.domain.com (/etc/httpd/conf.d/test.https.conf:20) 
port 443 namevhost test.domain.com /etc/httpd/conf.d/test.https.conf:20) 
port 443 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/ssl.conf:76) 
*:80     is a NameVirtualHost 
default server test.domain.com (/etc/httpd/conf.d/test.http.conf:3) 
port 80 namevhost test.domain.com (/etc/httpd/conf.d/test.http.conf:3) 
port 80 namevhost test1.domain.com (/etc/httpd/conf.d/test.http.conf:8) 
port 80 namevhost test2.domain.com (/etc/httpd/conf.d/test.http.conf:13) 
port 80 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.http.conf:18) 
    wild alias *.domain.com 

ответ

1

Apache решает виртуальные хосты в два этапа.

Во-первых, он находит лучшее совпадение с IP-хостом, смотрящим только на интерфейс и порт в директиве VirtualHost.

Если есть более одного наилучшего совпадения, когда запрос доступен, он выбирает наилучшее совпадение на основе имени из этого наилучшего совпадения на основе IP.

У вас есть только 1 VH для каждого набора виртуальных хостов на основе имени.

Итак, если на уровне соединения выбран IP-хост, другого выбора не будет. Он не перейдет к другому набору NVH'es.

+0

Итак, @covener, поэтому я попробовал добавить еще одну секцию vhost, чтобы учесть это, но все еще производит тот же результат. ' Redirect 404/ ErrorDocument 404« Нет такого сайта. Проверьте правописание URL. Наш главный сайт: \ http: //test2.domain.com " ' – tman

+0

вы добавили его _before_ текущего? Наследует ли он DocumentRoot от глобального conf? Является ли apachectl -S подсказкой? – covener

+0

Нет Я добавил их после текущего.apachectl -S показывает следующее: – tman

Смежные вопросы