Apache、mod_ftp は複数の名前付き vhosts を処理しません

Apache、mod_ftp は複数の名前付き vhosts を処理しません

私は複数のHTTPおよびHTTPS仮想ホストを実行するApache 2.2 Webサーバーを持っていますが、これらは問題なく動作します。今度はFTP仮想ホストを追加する必要があります(以前も1つありました!)そして、httpd -Sすべての仮想ホストが表示されていますが、リクエストを承認できるのはデフォルトのものだけです。mod_ftp マニュアルmod_ftpには、USERコマンドで名前が指定された場合、適切な仮想ホストにリダイレクトするFTPオプションがあるが、それでも最初の仮想ホストのエラーログに「ユーザーが見つかりません」というログが届く。[メールアドレス]それぞれの設定行は次のとおりです。

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 に切り替えることができないことが明確に示されました。私が理解している問題としては、1 つのホストが接続に応答する必要があるものの、FTP では認証前に名前でホストを選択できないため、Apache はFTP で受信するときに使用する vhost 定義を変更し、vhost を確認して正しいパスワード ファイルと正しいホーム ディレクトリを取得する必要があります。しかし、そうではありません。異なるポートで FTP サイトを実行する以外に、使用できる解決策はありますか (Apache は接続要求によってホスト間で明確に異なる)?USER [email protected]

PS: OS は 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 サーバーとして機能するとは知りませんでした。毎日何か新しいことを学んでいます :)

一般的に、Apache で VirtualHost エントリを使用する場合、メイン サーバーの多くのオプションが抑制され、代わりにブロック内で設定する必要があります<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>

関連情報