Unable to find a virtual host listening on port 80.... 请为端口80添加虚拟主机

问题描述 投票:0回答:3

我的网络服务器是这样设置的:

  • AWS EC2 Linux AMI
  • 阿帕奇 2.4
  • PHP 7
  • MySQL

Certbot 在我尝试运行时出现这样的错误:

无法找到侦听端口 80 的虚拟主机,Certbot 目前需要它来向 CA 证明您控制您的域。请为端口 80 添加一个虚拟主机。

我查看了人们在他们的博客等上发布的其他答案......但它们并不是专门针对 EC2 Linux AMI 的,或者变得比他们需要的更复杂。

它们中的大多数似乎与 /sites-available 或 enabled 有关...但是主 .conf 文件中已经有一行指向其他 .conf 文件。无需在那里添加一行。

amazon-ec2 virtualhost certbot
3个回答
21
投票

这一切都假设你已经安装了 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 重启


0
投票

尝试选项 1,“启动临时 Web 服务器”

我在端口 80 上运行了 nginx,甚至在端口 80 上设置了 xamp,在端口 80 上运行 curl,但它无法在本地主机上找到服务器

certbot 尝试使用现有服务器设置和验证主机可能存在的问题。

使用临时网络服务器(选项 1)有效,确保端口 80 上没有运行服务


0
投票

我没有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

© www.soinside.com 2019 - 2024. All rights reserved.