我有一個託管在 ISP 上的虛擬伺服器,有 2 個公共 IPv4 位址。我想使用 Apache 運行多個子網域(超過 2 個)並透過 HTTP 和 HTTPS 為它們提供服務。 SSL 憑證是 *.mydomain.com 的通配符。
我嘗試以這種方式在 Debian 中配置 Apache 但失敗了。我的虛擬主機不被接受,或者我收到 SSL 錯誤。 (我知道 Apache 在提供憑證之前看不到要求的主機名,但憑證包含所有可能的子網域)
請協助建立一個最適合 Debian 的 Apache 設定佈局的 httpd.conf。
所有細節:
- Apache 監聽 *:80(HTTP)和 *:443(HTTPS)
- 應同時為兩個連接埠/協定定義所有 NameVirtualHosts、別名等
- 預設 mydomain.com 和 www.mydomain.com 應根目錄為 /var/www
- foo.mydomain.com 和 bar.mydomain.com 等的附加 NameVirtualHosts 可以進行專門配置,例如擁有另一個 DocumentRoot
答案1
阿帕契能查看請求的主機名,使用TLS 伺服器名稱指示。
然而,這需要相對較新的網頁瀏覽器。例如,在 Windows XP 上使用 Internet Explorer 的使用者將收到其他網域的憑證不符訊息。 (值得慶幸的是,WinXP/IE 用戶幾乎絕跡了。)維基百科文章有一個列表,並且這是一個測試頁如果你不確定。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymlinks MultiViews
</Directory>
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymlinks MultiViews
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/private/example.com.pem
</VirtualHost>
附加(子)域:
<VirtualHost *:80>
ServerName foo.example.com
DocumentRoot /sites/foo
</VirtualHost>
<VirtualHost *:443>
ServerName foo.example.com
DocumentRoot /sites/foo
SSLEngine on
SSLCertificateFile /etc/ssl/private/foo.example.com.pem
</VirtualHost>