我在 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
。