我會坦率地承認我的無知——或者也許知識足夠危險。
我有一個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>
您應該刪除Order
和Allow
指令。這些是舊式 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
至少有三種方法可以解決這個問題:
- 使用DNS 挑戰,不需要 HTTP 連接
.well-known/
禁用-path的基本身份驗證由 certbot 使用。- 使用certbot的獨立模組。這將導致 10-20 秒的停機時間
答案3
一種可能的方法是為虛擬主機新增存取限制,如下所示:
<Directory "/www/docs/db">
<RequireAll>
Require ip <localip> <certbot host-name>
</RequireAll>
</Directory>
有關Require
指令的更多信息,您可以訪問阿帕奇文檔。