web-dev-qa-db-ja.com

仮想ホストを無視したグローバルApacheエイリアス

グローバルエントリーがあります

Alias /.well-known/acme-challenge /var/www/letsencrypt/.well-known/acme-challenge/

私のApache構成では、仮想ホストの外にあります。このように、上記のエイリアスはすべての仮想ホストに有効です。残念ながら、これが意図したとおりに機能しない仮想ホストはまだあります。リダイレクト、認証要件などによる.

特定の仮想ホストの構成を読み取る前に、このエイリアスを考慮するようにApacheに指示する方法はありますか?

7

すべての仮想ホストの前にこれを追加してみることができます:

Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/

#Bypass Auth
<Directory /var/www/letsencrypt/.well-known/acme-challenge/>
Satisfy any
</Directory>

#Redirect before other rewrite rules
RewriteCond %{REQUEST_URI} /\.well\-known/acme\-challenge/
RewriteRule (.*) /.well-known/acme-challenge/$1 [L,QSA]
5
Froggiz

同じletsencrypt acme Apacheエイリアスの問題であなたの質問に出くわしました。 Apacheのドキュメントを読んでも、グローバルエイリアスが期待どおりに機能しない理由がわかりません(ドキュメントによると)。

とにかく、これはRedirectMatchを使用する回避策です(ドキュメントによれば、エイリアスの前に評価されます)。 1つの追加のホストと1つのグローバル構成ファイルが必要です。

  1. Acmeリクエストのみを処理する追加の(サブ)ドメイン/ホストを作成します。「acme.mydomain.tld」と言いましょう
  2. ホスト自体をリダイレクトから除外して、すべてのacme-requestsをそのホストにリダイレクトするグローバル構成を作成(および有効化)します。

    <If "%{HTTP_Host} != 'acme.mydomain.tld'">
        RedirectMatch "^/.well-known/(.*)$" "http://acme.mydomain.tld/.well-known/$1" 
    </If>
    

これは、古いエイリアスアプローチで問題があったすべてのVirtualHostで機能します。

2
ChristophK

Apache 2.4のドキュメントによると、次のオプションがあります。

コンテナには2つの基本的なタイプがあります。ほとんどのコンテナは、リクエストごとに評価されます。囲まれたディレクティブは、コンテナに一致するリクエストにのみ適用されます。一方、<IfDefine>, <IfModule>, and <IfVersion>コンテナは、サーバーの起動時と再起動時にのみ評価されます。起動時に条件が真の場合、囲まれたディレクティブがすべてのリクエストに適用されます。条件が真でない場合、囲まれたディレクティブは無視されます。

上記のコンテナのいずれかを試してみて、すべてのリクエストに対してグローバルに必要なエイリアスを追加できるかもしれません。詳細はこちら: https://httpd.Apache.org/docs/2.4/sections.html#mergin

1
Diamond