原始帖子位于底部
如何在 Ubuntu 20.04 LTS 上使用带有子域的自定义域通过 Let's Encrypt 设置带有 SSL 证书的 Apache 2(一个花了很长时间才完成简单事情的人写的简短指南)
第一个警告
如果你打破了它,你必须重新开始
您可以通过 来使用 Let's Encrypt 的 Apache 插件安装程序(我建议您这样做)sudo certbot --apache
。它会自动.conf
生成并安装到.conf
Apache 读取的其他文件中。如果您开始弄乱证书(删除、移动),您将破坏它,我建议删除所有证书并重新开始清理.conf
文件==>
第二个警告
如果您使用虚拟主机,请将它们放在每个单独的文件中,VirtualHost
否则certbot将无法正确安装它们并会引发错误。
步骤1.conf
:为每个创建文件VirtualHost
。
- 由于我使用的是
VirtualHost
s,因此我编辑了000-default.conf
以 开头的内容<VirtualHost _default_:80>
(这将捕获所有未由 声明的解析 *.domain.com 地址VirtualHost
)。我还将index.html
中的编辑DocumentRoot /var/www/html
为“空白页”,而不是 Apache 默认页。 .conf
为所有子域名创建一个VirtualHost
,如下所示:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.domain.com
ServerAlias domain.com www.domain.com
DocumentRoot /var/www/domain.com/html
ErrorLog ${APACHE_LOG_DIR}/domain.error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 从第一个开始
.conf
,使用sudo a2ensite
启用每个VirtualHost
.conf
,然后sudo systemctl reload apache2
和 确认每个 都VirtualHost
正常工作而不会干扰其他。 - 运行
certbot --apache
,它将读取您的sites-available\*.conf
并提示您选择要为其生成证书的站点。 - (选修的)Certbot将提示您强制从 HTTP 重定向到 HTTPS。如果执行此操作,则以下内容将添加到您的
.conf
文件中:
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.domain.com [OR]
RewriteCond %{SERVER_NAME} =domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
- Certbot将自动启用新生成的
.conf
以 结尾的 SSL 文件*-le-ssl.conf
。
确认您的网站正常运行并且您已完成!
如果您认为可以以任何可能的方式更新此内容,请随时发表评论。我花了一周时间修改设置,结果发现,如果您做得简单干净,那么开始使用会很轻松(至少目前如此!)
[原帖背景]
Ubuntu 20.04 LTS, Apache 2, Let's Encrypt SSL certificates, Plex, Nextcloud, Website
**Questions:**
1. For `mydomain.com`, is it best practice to use a single `.conf` for `mydomain.com`, `subdomains.mydomain.com` and for both `:80` and `:443`?
2. I have certs via LetsEncrypt for @, www, plex, cloud (subdomains) - is this unnecessary?
3. What is best practice for setting up default vhost for :80 & :443? Should I only have a single `VirtualHost *.80`, and the rest are `subdomain.mydomain.com:80` ?
4. Once SSL works, what is the correct way to redirect http:// to https:// ? If a sub-domain does not support SSL, how can I exclude?
**Current status:** (I just broke everything, ignore below for now...)
- domain.com: :80 OK, :443 "This site can't provide a secure connection"
- www.domain.com: :80 OK, :443 "This site can't provide a secure connection"
- cloud.domain.com: :80 redirects to HTTPS, :443 "This site can't provide a secure connection"
- plex.domain.com: :80 redirects to mydomain.com:80, (no :443 yet)
- ssh.domain.com: :80 redirects to mydomain.com:80, (no :443 yet)
我的老单曲.conf
: https://pastebin.com/HWETrDfD