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

Apache NameVirtualHost на порту 443 игнорирует ServerAlias

У меня есть настройка виртуального хоста на основе имени на порту 443, так что запросы на хосте apple.fruitdomain проксируются в приложение apple, а запросы на хосте orange.fruitdomain проксируются в orange-app. Это работает, но я хотел бы добавить ServerAlias ​​для каждого, чтобы запросы на хосте «яблоко» проксировались в приложение «яблоко», а запросы на хосте «апельсин» проксировались в приложение апельсина. Если я просто добавлю директиву ServerAlias ​​к виртуальному хосту, это не сработает. ssl.conf ниже:

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
ServerName apple.fruitdomain
ServerAlias apple
SSLProxyEngine on
ProxyPass /apple-app https://localhost:8181/apple-app
ProxyPassReverse /apple-app https://localhost:8181/apple-app
...
</VirtualHost>
<VirtualHost *:443>
ServerName orange.fruitdomain
ServerAlias orange
SSLProxyEngine on
ProxyPass /orange-app https://localhost:8181/orange-app
ProxyPassReverse /orange-app https://localhost:8181/orange-app
...
</VirtualHost>

Интересно, что если я сделаю аналогичную настройку, но с портом 80, тогда ServerAlias ​​будет работать ...

Что ж, из моего тестирования видно, что директива ServerAlias ​​игнорируется при использовании виртуального хостинга на основе имени на порту 443 с Apache 2.2.15. Вероятно, это связано с особыми требованиями протокола SNI (SNI - Википедия; SNI - Apache Wiki). Чтобы обойти эту проблему, нужно создать два отдельных виртуальных хоста; в моем примере у одного будет ServerName orange.fruitdomain, а у другого - ServerName orange.

Чтобы исправить подчеркнутую конфигурацию, вам необходимо создать еще один VirtualHost для целей «по умолчанию», используя:

    ServerName localhost
or
    ServerName your_server_name

Пожалуйста, проверьте apache httpd docs (Ex.) - http://httpd.apache.org/docs/2.2/mod/core.html#servername

Директива ServerName устанавливает схему запроса, имя хоста и порт, которые сервер использует для идентификации себя. Это используется при создании URL-адресов перенаправления. Кроме того, ServerName используется (возможно, вместе с ServerAlias) для уникальной идентификации виртуального хоста при использовании виртуальных хостов на основе имени.

прокомментируйте строку listen 443, потому что прослушивание начинается с ssl автоматически, и если вы запустите его раньше, он увидит конфликт.