Apache, mod_ftp не обрабатывает несколько именованных виртуальных хостов

Apache, mod_ftp не обрабатывает несколько именованных виртуальных хостов

У меня есть веб-сервер Apache 2.2, на котором запущено несколько виртуальных хостов HTTP и HTTPS, они работают отлично. Теперь мне нужно добавить FTP vhost (раньше был один!), и хотя httpd -Sотображаются все vhosts, только тот, что по умолчанию, может авторизовать запросы.руководство по mod_ftpговорит, что есть опция FTP для mod_ftp для перенаправления на правильный vhost, если команда USER предоставляет имя, журналы по-прежнему поступают в журнал ошибок первого vhost с сообщением «пользователь не найден[email protected]". Соответствующие строки конфигурации находятся здесь:

LoadModule ftp_module modules/mod_ftp.so
Listen 21 ftp
FTPOptions StripHostName VirtualHostByUser 
# this should allow selecting vhosts by hostname part in user@hostname
NameVirtualHost *:21

#first vhost
<VirtualHost *:21>
    FTP On
    ServerAdmin [email protected]
    DocumentRoot "d:/webroot/firsthost"
    ServerName www.firsthost.com
    ServerAlias firsthost.com
    ErrorLog "d:/webroot/logs/firsthost-ftp-error.log"
    CustomLog "d:/webroot/logs/firsthost-ftp-access.log" common
    SSLEngine off

    <Directory />
        AllowOverride None
        Options Indexes -FollowSymLinks
        Order deny,allow
        Allow from all
        ForceType text/plain
        AuthType basic
        AuthBasicProvider file
        AuthUserFile "C:/server/apache/conf/extra/vhosts/firsthost-htpasswd.users"
        AuthName "firsthost.com FTP"
        Require valid-user
    </Directory>
</VirtualHost>

#second vhost - never gets to be addressed
<VirtualHost *:21> 
    FTP On
    ServerAdmin [email protected]
    DocumentRoot "d:/webroot/secondhost.com"
    ServerName www.secondhost.com
    ServerAlias secondhost.com
    SSLEngine off
    <Directory />
        AllowOverride None
        Options Indexes -FollowSymLinks
        Order deny,allow
        Allow from all
        ForceType text/plain
        AuthType basic
        AuthBasicProvider file
        AuthUserFile "C:/server/apache/conf/extra/vhosts/secondhost-htpasswd.users"
        AuthName "secondhost.com FTP"
        # doesn't work anyway, we don't have hostname at AuthName state
        Require valid-user
    </Directory>
    ErrorLog "d:/webroot/logs/secondhost-error.log"
    CustomLog "d:/webroot/logs/secondhost-access.log" common
</VirtualHost>

Я использую totalcmd для тестирования, и он четко указывает, что "firsthost.com FTP" объявляется, и ничего не может быть сделано для переключения на secondhost.com. Насколько я понимаю проблему, в то время как один хост должен действительно ответить на соединение, поскольку FTP не позволяет выбирать хост по имени до аутентификации, Apache должен затем изменить определение vhost, используемое при получении по FTP, и просмотреть свои vhosts, чтобы получить правильный файл паролей и правильный домашний каталог. Этого не происходит. Есть ли какие-либо пригодные решения, кроме запуска FTP-сайтов на разных портах (где Apache будет явно различать эти хосты по запросу на соединение)?USER [email protected]

PS: ОС — Windows Server 2008R2, поэтому сборка Apache или mod_ftp из исходников невозможна. Это может быть ошибкой в ​​конкретном исполняемом наборе Apache+mod_ftp. Apache отвечает:

Server version: Apache/2.2.24 (Win32)
Server built:   Mar  1 2013 22:27:56

mod_ftp отвечает: mod_ftp 0.9.6

решение1

Никогда не думал, что Apache может работать как FTP-сервер. Каждый день узнаешь что-то новое :)

В общем случае: при использовании записей VirtualHost в Apache многие параметры основного сервера подавляются и вместо этого должны быть установлены в <VirtualHost> ... </VirtualHost>блоке.

ядуматьэто может быть такFTPOptions VirtualHostByUserтакже.

Пытаться:

<VirtualHost *:21>
    FTP On
    ServerName www.firsthost.com
    ServerAlias firsthost.com
    FTPOptions StripHostName VirtualHostByUser 
    ...
</VirtualHost>

<VirtualHost *:21> 
    FTP On
    ServerName www.secondhost.com
    ServerAlias secondhost.com
    FTPOptions StripHostName VirtualHostByUser 
    ...
</VirtualHost>

Связанный контент