Ich habe einen Apache 2.2-Webserver, auf dem mehrere virtuelle HTTP- und HTTPS-Hosts laufen. Diese funktionieren einwandfrei. Jetzt muss ich einen virtuellen FTP-Host hinzufügen (da war schon einer!), und obwohl httpd -S
alle virtuellen Hosts angezeigt werden, kann nur der Standard-Host Anfragen autorisieren. Dermod_ftp Handbuchsagt, dass es eine FTP-Option für mod_ftp gibt, um zum richtigen virtuellen Host umzuleiten, wenn der USER-Befehl einen Namen angibt, aber trotzdem kommen die Protokolle im Fehlerprotokoll des ersten virtuellen Hosts an und geben an: „Kein Benutzer gefunden[email geschützt]". Die entsprechenden Konfigurationszeilen finden Sie hier:
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>
Ich verwende totalcmd zum Testen und es wird eindeutig angezeigt, dass „firsthost.com FTP“ angekündigt wird und nichts dazu veranlasst werden kann, auf secondhost.com umzuschalten. So wie ich das Problem verstehe, sollte ein Host zwar wirklich auf die Verbindung reagieren, da FTP keine Auswahl des Hosts nach Namen vor der Authentifizierung zulässt, Apache sollte dann jedoch die beim Empfang per FTP verwendete vHost-Definition ändern und seine vHosts überprüfen, um die richtige Kennwortdatei und das richtige Home-Verzeichnis zu ermitteln. Das tut es nicht. Gibt es brauchbare Lösungen, außer FTP-Sites auf unterschiedlichen Ports auszuführen (wobei Apache diese Hosts anhand der Verbindungsanforderung eindeutig unterscheiden würde)?USER [email protected]
PS: Das Betriebssystem ist Windows Server 2008R2, daher ist es nicht möglich, Apache oder mod_ftp aus Quellen zu erstellen. Dies kann ein Fehler in einem bestimmten ausführbaren Satz von Apache+mod_ftp sein. Apache antwortet mit:
Server version: Apache/2.2.24 (Win32)
Server built: Mar 1 2013 22:27:56
mod_ftp antwortet mit: mod_ftp 0.9.6
Antwort1
Ich hätte nie gedacht, dass Apache als FTP-Server funktioniert. Man lernt nie aus :)
Generell gilt: Bei der Verwendung von VirtualHost-Einträgen in Apache werden viele Optionen vom Hauptserver unterdrückt und müssen stattdessen im <VirtualHost> ... </VirtualHost>
Block gesetzt werden.
ICHdenkendas kann der Fall sein fürFTPOptions VirtualHostByUser
sowie.
Versuchen:
<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>