Apache、SSL、LetsEncrypt、Ubuntu:带有子域和 SSL 的自定义域

Apache、SSL、LetsEncrypt、Ubuntu:带有子域和 SSL 的自定义域

原始帖子位于底部

如何在 Ubuntu 20.04 LTS 上使用带有子域的自定义域通过 Let's Encrypt 设置带有 SSL 证书的 Apache 2(一个花了很长时间才完成简单事情的人写的简短指南

第一个警告

如果你打破了它,你必须重新开始

您可以通过 来使用 Let's Encrypt 的 Apache 插件安装程序(我建议您这样做)sudo certbot --apache。它会自动.conf生成并安装到.confApache 读取的其他文件中。如果您开始弄乱证书(删除、移动),您将破坏它,我建议删除所有证书并重新开始清理.conf文件==>

第二个警告

如果您使用虚拟主机,请将它们放在每个单独的文件中,VirtualHost否则certbot将无法正确安装它们并会引发错误。

步骤1.conf:为每个创建文件VirtualHost

  1. 由于我使用的是VirtualHosts,因此我编辑了000-default.conf以 开头的内容<VirtualHost _default_:80>(这将捕获所有未由 声明的解析 *.domain.com 地址VirtualHost)。我还将index.html中的编辑DocumentRoot /var/www/html为“空白页”,而不是 Apache 默认页。
  2. .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>
  1. 从第一个开始.conf,使用sudo a2ensite启用每个VirtualHost .conf,然后sudo systemctl reload apache2和 确认每个 都VirtualHost正常工作而不会干扰其他。
  2. 运行certbot --apache,它将读取您的sites-available\*.conf并提示您选择要为其生成证书的站点。
  3. (选修的)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]
  1. 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

相关内容