Apache, mod_ftp는 명명된 여러 가상 호스트를 처리하지 않습니다.

Apache, mod_ftp는 명명된 여러 가상 호스트를 처리하지 않습니다.

여러 HTTP 및 HTTPS 가상 호스트를 실행하는 Apache 2.2 웹 서버가 있는데 제대로 작동합니다. 이제 FTP 가상 호스트(이전에도 있었습니다!)를 추가해야 하며, httpd -S모든 가상 호스트를 표시하는 동안 기본 가상 호스트만 요청을 승인하게 됩니다. 그만큼mod_ftp 매뉴얼USER 명령이 이름을 제공하는 경우 적절한 가상 호스트로 리디렉션하기 위해 mod_ftp에 대한 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으로 전환할 수 없다는 것이 명확하게 나와 있습니다. 내가 문제를 이해하고 있는 것처럼, 하나의 호스트가 실제로 연결에 응답해야 하는 반면, FTP는 인증 전에 이름으로 호스트를 선택할 수 없으므로 Apache는 FTP에서 수신할 때 사용되는 가상 호스트 정의를 변경하고 가상 호스트를 검토하여 올바른 비밀번호 파일을 가져와야 합니다. 올바른 홈 디렉토리. 그렇지 않습니다. 다른 포트에서 FTP 사이트를 실행하는 것(Apache가 연결 요청에 따라 해당 호스트 간에 분명히 다른 경우)을 제외하고 사용 가능한 솔루션이 있습니까?USER [email protected]

추신: 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>

관련 정보