由于 httpd.bin 端口已被占用,导致 Apache Certbot 运行出现问题

由于 httpd.bin 端口已被占用,导致 Apache Certbot 运行出现问题

我的目标是让 SSL 在我的服务器上通过 HTTPS 运行。sudo certbot --apache作为以下步骤的一部分,我正在尝试运行命令来为我的服务器生成证书https://certbot.eff.org/lets-encrypt/ubuntutrusty-apache

我遇到了这个问题,因为当我运行命令时出现错误

Error while running apache2ctl graceful.
httpd not running, trying to start
Action 'graceful' failed.
Address already in use: AH00072: make_sock: could not bind to address [::]:80

当我检查端口 80 上正在运行什么时,我看到了 httpd.bin。

tcp6       0      0 :::80                   :::*                    LISTEN      1372/httpd.bin

但上面的错误消息表明 httpd.bin 未运行。我尝试终止在端口 80 上运行的进程,但未能成功。我还尝试找到 Apache 父进程的 PID(http://www.informit.com/articles/article.aspx?p=26130&seqNum=3) 但是我在 usr/local 中没有 /acpache 目录。

我应该如何终止该过程? - 我应该专注于终止这个过程,还是有其他方法可以解决这个问题?

另一件令人困惑的事情是,当我运行 sudo service apache2 status 时,结果是 apache2 没有运行,但我无法启动此过程,因为端口 80 正在使用中(不确定在我的场景中是否需要 Apache2。)

任何帮助将不胜感激!

答案1

目前letsencrypt/ certbotwith--apache选项无法按预期工作。应该对与 Apache 交互的 CertBot 机制应用一些更改,但尚未应用。我找不到我在 2018 年 1 月发现此问题时阅读的确切文章。

您可以将letsencrypt/certbot与选项 一起使用certonly。使用此选项,该工具将启动自己的临时 Web 服务器来生成证书文件。端口80和应该在防火墙中打开。并且您应该暂时停止 Apache。不幸的是,您应该在证书443时执行此操作。renew

sudo service apache2 stop           # Ubuntu 14.04
sudo systemctl stop apache2.service # Ubuntu 16.04 and above

sudo letsencrypt certonly --rsa-key-size 4096 --email [email protected] -d example.com -d www.example.com -d another.example.com
# Select the option: Automatically use temporary web server (standalone)

sudo service apache2 start           # Ubuntu 14.04
sudo systemctl start apache2.service # Ubuntu 16.04 and above

然后您需要手动编辑虚拟主机的配置文件。以下是从 HTTP 永久重定向到 HTTPS 的示例(替换example.com为您的 FQDN):

<VirtualHost *:80>
        ServerName example.com

        # Redirect Requests to HTTPS
        Redirect permanent / https://example.com/

        ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
        CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName example.com
        ServerAdmin [email protected]

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

        DocumentRoot /var/www/html
        <Directory /var/www/html>
            # Conf directives...
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/example.com.ssl.error.log
        CustomLog ${APACHE_LOG_DIR}/example.com.ssl.access.log combined
    </VirtualHost>
</IfModule>

启用 Apache 的 SSL 模块并再次重新启动。

参考:

希望这有帮助!

相关内容