Virtualhost

全域 Apache 別名,忽略虛擬主機

  • May 9, 2021

我有一個全域條目

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

在我的 apache 配置中,在任何虛擬主機之外。這樣,上述別名對所有虛擬主機都有效。不幸的是,仍有一些虛擬主機無法按預期工作,例如由於重定向、身份驗證要求等。

有沒有辦法告訴 apache 在讀取特定虛擬主機的配置之前考慮這個別名?

您可以嘗試在所有虛擬主機之前添加它:

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]

我遇到了同樣的letsencrypt acme apache別名問題。通讀 apache 文件後,我仍然不明白為什麼全域別名不能按預期工作(根據文件應該)。

無論如何,這是一個使用 RedirectMatch 的解決方法(根據文件,它在別名之前被評估)。它需要一台額外的主機和一個全域配置文件:

  1. 創建一個僅服務於 acme 請求的附加(子)域/主機,比如說“acme.mydomain.tld”
  2. 創建(並啟用)將所有 acme 請求重定向到該主機的全域配置,不包括重定向主機本身:
<If "%{HTTP_HOST} != 'acme.mydomain.tld'">
   RedirectMatch "^/.well-known/(.*)$" "http://acme.mydomain.tld/.well-known/$1" 
</If>

這適用於我所有與舊別名方法有問題的虛擬主機。

引用自:https://serverfault.com/questions/744220