Eu tenho um servidor web Apache 2.2 executando vários hosts virtuais HTTP e HTTPS, eles funcionam bem. Agora preciso adicionar um vhost FTP (havia um antes!) E, embora httpd -S
exiba todos os vhosts, apenas o padrão pode autorizar solicitações. Omanual mod_ftpdiz que há uma opção de FTP para mod_ftp para redirecionar para o vhost adequado se o comando USER fornecer um nome, ainda assim os logs chegam ao log de erros do primeiro vhost informando "nenhum usuário encontrado[e-mail protegido]". As respectivas linhas de configuração estão aqui:
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>
Eu uso o totalcmd para testar e ele afirma claramente que "firsthost.com FTP" é anunciado e nada pode ser feito para mudar para secondhost.com. Pelo que entendi o problema, embora um host deva realmente responder à conexão, já que o FTP não permite selecionar o host pelo nome antes da autenticação, o Apache deve então alterar a definição de vhost usada ao receber por FTP e revisar seus vhosts para obter o arquivo de senha correto e diretório inicial correto. Isso não acontece. Alguma solução utilizável, exceto a execução de sites FTP em portas diferentes (onde o Apache diferiria claramente entre esses hosts por solicitação de conexão)?USER [email protected]
PS: O sistema operacional é o Windows Server 2008R2, portanto, construir o Apache ou o mod_ftp a partir das fontes está fora de alcance. Isso pode ser um bug em um conjunto executável específico do Apache + mod_ftp. Apache responde com:
Server version: Apache/2.2.24 (Win32)
Server built: Mar 1 2013 22:27:56
mod_ftp responde com: mod_ftp 0.9.6
Responder1
Eu nunca soube que o Apache funcionaria como um servidor FTP, você aprende algo novo todos os dias :)
Em geral: ao usar entradas VirtualHost no Apache, muitas opções do servidor principal são suprimidas e precisam ser definidas no <VirtualHost> ... </VirtualHost>
bloco.
EUpensaresse pode ser o casoFTPOptions VirtualHostByUser
também.
Tentar:
<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>