Apache:如何「隱藏」子網域但透過 https 提供服務

Apache:如何「隱藏」子網域但透過 https 提供服務

我會坦率地承認我的無知——或者也許知識足夠危險。

我有一個http://db.<mydomain>.com為 phpMyAdmin 實用程式提供服務的子網域。它目前位於一個帶有 Apache 指令的目錄中,要求 .htaccess 中的有效用戶,這在當時是有意義的,因為我不想向公眾公開 phpMyAdmin 登入頁面。

由此產生的問題是嘗試使用 cert-bot 為我的網站建立 SSL 證書,它無法驗證 ACME 質詢,因為該質詢無法突破 .htaccess 限制。

如何同時透過 https 提供此子網域服務,同時還需要額外的安全層才能讓使用者看到 phpMyAdmin 登入頁面?

   <VirtualHost *:80>
        ServerName db.<mydomain>.com
        ServerAlias www.db.<mydomain>.com
        DocumentRoot /var/www/subdomains/db/phpMyAdmin
    </VirtualHost>
    <Directory "/var/www/subdomains/db">
        Options Indexes FollowSymLinks ExecCGI
        Order allow,deny
        Allow from all
        AuthType Basic
        AuthUserFile "/var/www/.htpasswd-users"
        require valid-user
    </Directory>

答案1

<Directory "/var/www/subdomains/db">
    Options Indexes FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthUserFile "/var/www/.htpasswd-users"
    require valid-user
</Directory>

您應該刪除OrderAllow指令。這些是舊式 Apache 2.2 指令,以前在 Apache 2.4 上已棄用,並且可能會導致衝突(但無論如何都不需要它們)。

雖然很好奇為什麼你有一個<Directory>部分/var/www/subdomains/db,但DocumentRoot被定義為/var/www/subdomains/db/phpMyAdmin

然後為允許無限制存取的檔案路徑新增一個附加<Directory>部分,以便 certbot 可以「驗證 ACME 質詢」。/.well-known/例如:

<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
    Require all granted
</Directory>

答案2

至少有三種方法可以解決這個問題:

  1. 使用DNS 挑戰,不需要 HTTP 連接
  2. .well-known/禁用-path的基本身份驗證由 certbot 使用。
  3. 使用certbot的獨立模組。這將導致 10-20 秒的停機時間

答案3

一種可能的方法是為虛擬主機新增存取限制,如下所示:

<Directory "/www/docs/db">
    <RequireAll>
        Require ip <localip> <certbot host-name>
    </RequireAll>
</Directory>

有關Require指令的更多信息,您可以訪問阿帕奇文檔

相關內容