Apache: サブドメインを「隠す」が、https 経由でサービスを提供する方法

Apache: サブドメインを「隠す」が、https 経由でサービスを提供する方法

私は自分の無知を率直に認めます。あるいは、危険なほどの知識があるかもしれません。

phpMyAdmin ユーティリティを提供するサブドメインがありますhttp://db.<mydomain>.com。現在、このサブドメインは、.htaccess から有効なユーザーを要求する Apache ディレクティブを含むディレクトリにあります。これは、phpMyAdmin ログイン ページを一般に公開したくないため、当時は理にかなったことでした。

これによって発生した問題は、cert-bot を使用してサイトの SSL 証明書を作成しようとしたときに、チャレンジが .htaccess 制限を通過できないため、ACME チャレンジを検証できないことです。

ユーザーが phpMyAdmin ログイン ページを表示できるようにするには、このサブドメインを https 経由で同時に提供しながら、追加のセキュリティ レイヤーも要求するにはどうすればよいでしょうか。

   <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>次に、無制限のアクセスを許可するファイル パスの追加セクションを追加します。/.well-known/これにより、certbot は「ACME チャレンジを検証」できるようになります。例:

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

答え2

これを解決するには少なくとも 3 つの方法があります。

  1. 使用DNSチャレンジHTTP接続を必要としない
  2. .well-known/-pathの基本認証を無効にするcertbot によって使用されます。
  3. certbotのスタンドアロンモジュールを使用します。これにより、10〜20秒のダウンタイムが発生します。

答え3

1 つの方法としては、次のように仮想ホストにアクセス制限を追加することが挙げられます。

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

指令の詳細については、以下Requireをご覧ください。Apache ドキュメント

関連情報