我的网络服务器是这样设置的:
Certbot 在我尝试运行时出现这样的错误:
无法找到侦听端口 80 的虚拟主机,Certbot 目前需要它来向 CA 证明您控制您的域。请为端口 80 添加一个虚拟主机。
我查看了人们在他们的博客等上发布的其他答案......但它们并不是专门针对 EC2 Linux AMI 的,或者变得比他们需要的更复杂。
它们中的大多数似乎与 /sites-available 或 enabled 有关...但是主 .conf 文件中已经有一行指向其他 .conf 文件。无需在那里添加一行。
这一切都假设你已经安装了 Apache 并且正在尝试使用 Certbot。首先,确保在 DNS 中为您的 IP 地址设置了 A 记录。另外,在这里作为一个基本介绍,在CentOS中,Apache被称为“httpd”,而在Ubuntu中,Apache被称为“apache2”。
CentOS 的简答
cd /etc/httpd/conf.d
sudo nano yourDomainName.conf
粘贴、编辑并保存以下内容:
<VirtualHost *:80>
ServerName yourDomainName.com
DocumentRoot /var/www/html
ServerAlias www.yourDomainName.com
ErrorLog /var/www/error.log
CustomLog /var/www/requests.log combined
</VirtualHost>
然后:
sudo service httpd restart
有了这个你应该看到虚拟主机:
httpd -D DUMP_VHOSTS
Ubuntu的简答
sudo su (so that you can cd to apache directory)
cd /etc/apache2/sites-available
vim yourDomainName.conf
粘贴、编辑并保存以下内容:
<VirtualHost *:80>
ServerName yourDomainName.com
DocumentRoot /var/www/html
ServerAlias www.yourDomainName.com
ErrorLog /var/www/error.log
CustomLog /var/www/requests.log combined
</VirtualHost>
然后:
a2ensite yourDomainName
service apache2 restart
ctrl-d to exit root
安装 certbot ****已更新,因为 certbot-auto 不再可用:
过去你会下载 certbot-auto 并运行该脚本来获取你的 ssl 证书。让我们加密不再支持这个。现在有两种不同的支持方法。一种方法是使用 Snap 安装 certbot,这需要您先安装 Snap。我不打算在这里详细介绍该方法,他们的网站上有很多相关说明。另一种方法是使用 Certbot Docker 映像。这重量轻得多,因为 Snap 是一个很大的安装。
sudo service apache2 stop / sudo service httpd stop
sudo docker run -it --rm --name certbot -p 80:80 -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly
sudo service apache2 start / sudo service httpd start
你暂时关闭 Apache 并运行一个特殊的 Certbot 服务器来获取证书,但是在你获得证书后你仍然需要虚拟主机,因为这就是 Apache 的工作方式。
...
获得证书后的附加信息 好的。 Certbot 表示已成功安装证书。怎么办?好吧,它不仅要起作用。您仍然需要在 apache 中启用 ssl,并为端口 443 添加另一个虚拟主机。
打开您之前粘贴到的同一文件并添加以下内容:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName yourDomainName.com
DocumentRoot /var/www/html
ServerAlias www.yourDomainName.com
ErrorLog /var/www/error.log
CustomLog /var/www/requests.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
LogLevel alert rewrite:trace3
SSLCertificateFile /etc/letsencrypt/live/yourDomainName.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourDomainName.com/privkey.pem
</VirtualHost>
</IfModule>
对于 CentOS,您可能需要安装 ssl 模块:
sudo yum install mod_ssl
对于 Ubuntu,您可能需要启用 ssl 模块:
sudo a2enmod ssl
对于两者,重新启动 Apache:
sudo service apache2 restart / sudo service httpd restart
对于 CentOS,您可能需要在防火墙上启用端口 443。我不打算在这里介绍,但是“iptables”服务(和相关命令)是您将看到的内容。
最后,对于两者: 您将要将端口 80 (http) 上的所有请求重定向到端口 443 (https)。 Apache 应该已经默认安装了重写模块,但你需要启用它:
sudo a2enmod rewrite
在您之前添加的 *:80 虚拟主机中,您将添加一些如下所示的行:
<VirtualHost *:80> (you've already added this line, don't copy this part)
<IfModule mod_rewrite.c>
# Force https secure connection
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
sudo 服务 apache2 重启 / sudo 服务 httpd 重启
尝试选项 1,“启动临时 Web 服务器”
我在端口 80 上运行了 nginx,甚至在端口 80 上设置了 xamp,在端口 80 上运行 curl,但它无法在本地主机上找到服务器
certbot 尝试使用现有服务器设置和验证主机可能存在的问题。
使用临时网络服务器(选项 1)有效,确保端口 80 上没有运行服务
我没有httpd服务,所以我知道这样的目录和文件。 但是感谢您的建议,然后我才在目录中找到文件
mydomain.conf
(在你的情况下你应该更换 mydomain
/etc/apache2/sites-available
我按照上面的建议修改了它
sudo nano /etc/apache2/sites-available/mydomain.conf
<VirtualHost *:80> DocumentRoot /var/www/mydomain ServerName mydomain </VirtualHost>
然后检查是否正确
sudo apache2ctl configtest
然后重新启动apache
systemctl reload apache2
然后运行 certbot
certbot --apache -d mydomain