設定 Apache 透過 HTTP + HTTPS 為多個子網域提供服務

設定 Apache 透過 HTTP + HTTPS 為多個子網域提供服務

我有一個託管在 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>

相關內容