Apache2

如何在apache上加密多個虛擬伺服器

  • May 20, 2020

我通過 Apache 伺服器上的乘客在 Rails 應用程序上託管了幾個相同的 ruby​​ 實例。過去,這些應用程序是通過單獨的域提供的。但是現在我從我們的 IT 部門收到了一個域和幾個子分支,我必須通過以下方式為應用程序提供服務:

domain.example.de/app_one
domain.example.de/app_two
....

雖然這在沒有讓加密的情況下很好地工作(只需要以這種方式配置 apache 和 ruby​​ on rails 應用程序)。我想像以前一樣通過 https (lets-encrypt) 傳遞頁面。我以這種方式配置了 Apache:

<VirtualHost *:80>
   ServerName http://domain.example.de/app_one

   # Tell Apache and Passenger where your app's 'public' directory is
   DocumentRoot /var/www/app_one/public

   PassengerRuby /usr/local/rvm/gems/ruby-2.3.8/wrappers/ruby

   # Relax Apache security settings
   <Directory /var/www/app_one/public>
     Allow from all
     Options -MultiViews
     # Uncomment this if you're on Apache >= 2.4:
     Require all granted
   </Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.example.de/app_one
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

但是打電話的時候

sudo certbot --apache

它沒有列出要為其頒發證書的新“伺服器名稱”。如果我使用“-d”標誌呼叫 certbot 並手動提供“ServerName”,則會收到域名包含無效字元的錯誤。

是否可以以這種方式為每個應用程序頒發證書?或者我是否必須為該域發布一個並將其用於該域下的每個應用程序?

http://domain.example.de/app_one不是有效的域名。其中的域部分是domain.example.de. 這是您應該在ServerName指令和 certbot 中使用的內容。其他一切都在其他地方配置。

/app_one可以在<Location>塊中配置或作為反向代理配置,您的部分http://已經暗示了:80``<VirtualHost>

關於 certbot,--apache參數只告訴它使用 Apache 來處理驗證。您仍然需要為域提供-d參數。

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