使用 NodeJS 代理通行证的 Apache SSL 配置无法启动

Posted

技术标签:

【中文标题】使用 NodeJS 代理通行证的 Apache SSL 配置无法启动【英文标题】:Apache SSL Config With NodeJS Proxy Pass Fails to Start 【发布时间】:2018-04-19 00:38:54 【问题描述】:

我正在尝试在 Ubuntu 16.04 上的 Apache 中对 PM2 中运行的 nodejs 服务进行代理传递。

我最初尝试将该服务用作在端口 80 上运行的普通 http 服务,并且效果很好。

然后我想将它部署到生产环境中,因此它显然需要有 SSL 证书。因此,我在第一个 VirtualHost 中添加了重定向到安全服务,并将 SSL 内容添加到原始配置中,以使其使用当前证书在端口 443 上运行。

目前我有一个通配符证书,可以与 domain.com 下的所有内容一起使用

<VirtualHost *:80>
    ServerName my.domain.com
    Redirect permanent / https://my.domain.com/servicename
</VirtualHost>

<VirtualHost *:443>

    ServerName my.domain.com
    DocumentRoot /var/www/servicename


    SSLEngine on

    SSLCertificateFile /etc/ssl/certs/my.crt
    SSLCertificateKeyFile /etc/ssl/certs/my.key
    # I don't actually have a ca certificate so I tried adding the my.crt again with no luck. I also don't have any .pem files either
    #SSLCACertificateFile /etc/ssl/certs/my.crt

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia Full
    <Proxy *>
        Require all granted
    </Proxy>

    <Location /servicename>
        ProxyPass http://127.0.0.1:8080
        ProxyPassReverse http://127.0.0.1:8080
    </Location>

</VirtualHost>

但是,当我保存此配置并执行 sudo systemctl restart apache2 时,它告诉我 apache 无法启动

 Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.

然后我运行 systemctl status apache2.service 并得到以下信息:

 apache2.service - LSB: Apache2 web server
 Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
 Drop-In: /lib/systemd/system/apache2.service.d
 apache2-systemd.conf
 Active: failed (Result: exit-code) since Mon 2017-11-06 12:41:54 CST; 40s ago
 Docs: man:systemd-sysv-generator(8)
 Process: 10361 ExecStop=/etc/init.d/apache2 stop (code=exited,status=0/SUCCESS)
 Process: 9310 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
 Process: 10476 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)

我在配置中做错了什么?

【问题讨论】:

尝试apachectl configtest - 应该会报告您的配置的特定错误。 【参考方案1】:

在@Kryten 的建议下使用apachectl configtest,我发现我没有安装ssl,所以解决方案是sudo a2enmod ssl 和apache 启动!

【讨论】:

以上是关于使用 NodeJS 代理通行证的 Apache SSL 配置无法启动的主要内容,如果未能解决你的问题,请参考以下文章

添加代理通行证后,apache重写规则不起作用

Nodejs 无法在 ws:// apache 代理服务器上建立连接

使用 node-http-proxy 从 NodeJS 到 Apache 的反向代理不起作用

apache和nodejs共享80怎么设置?

使用代理通行证的 Nginx 重写规则

apache2 的https配置和代理https后端nodejs配置