如何在 Apache 上加密多个虚拟服务器

如何在 Apache 上加密多个虚拟服务器

我在 Apache 服务器上通过 Passenger 托管了同一个 Ruby on Rails 应用程序的多个实例。过去,这些应用程序是通过单独的域提供的。但现在,我从我们的 IT 部门获得了一个域和几个子分支,我必须以以下方式为这些应用程序提供服务:

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

虽然这在没有 lets-encrypt 的情况下也能很好地工作(只需以这种方式配置 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 并手动提供“服务器名称”,则会收到错误消息,提示域名包含无效字符。

是否可以用这种方式为每个应用程序颁发证书?还是我必须为域颁发一个证书,然后将其用于该域下的每个应用程序?

答案1

http://domain.example.de/app_one不是有效的域名。域名部分是domain.example.de。这是您应该在ServerName指令和 certbot 中使用的内容。其他所有内容都在其他地方配置。

/app_one可以配置为<Location>块或反向代理,http://这已经由:80你的<VirtualHost>

对于 certbot,该--apache参数仅告诉它使用 Apache 来处理验证。您仍然需要向参数提供域-d

相关内容