我有一個 Apache 2.2 Web 伺服器,運行多個 HTTP 和 HTTPS 虛擬主機,這些工作正常。現在我需要新增一個 FTP 虛擬主機(之前有一個!),雖然httpd -S
顯示所有虛擬主機,但只有預設虛擬主機可以授權請求。這mod_ftp 手冊說 mod_ftp 有一個 FTP 選項,如果 USER 命令提供了名稱,可以重定向到正確的虛擬主機,但仍然會記錄到達第一個虛擬主機的錯誤日誌,指出“未找到用戶”[電子郵件受保護]」。相應的配置行在這裡:
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]
PS:作業系統是 Windows Server 2008R2,因此從原始碼建置 Apache 或 mod_ftp 是不可能的。這可能是 Apache+mod_ftp 的特定可執行集中的錯誤。阿帕契回應:
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>