首页 > 解决方案 > 在 Apache 服务器上托管 HTTPS nodejs 服务器

问题描述

我有一个托管在 WHM/cPanel 上的 nodejs 应用程序,它使用它自己的 SSL 证书。设置:

app.all('*', function (req, res) {
    res.redirect('https://' + req.headers.host + req.url);
})

let server = http.createServer(app);
server.listen(port);

const httpsServer = https.createServer(sslFiles, app);
httpsServer.listen(443, () => {
    console.log("started")
});

启动服务器时出现错误:

Error: bind EADDRINUSE null:443

在端口 443 上只有一个其他服务运行,即 httpd,我已经修改了虚拟主机,预包含:

<VirtualHost 123.4.567.890:443>
    ServerName website.co.uk
    ServerAlias www.website.co.uk
    DocumentRoot /root/public_html/

    ErrorLog /root/logs/vherror.log

    SSLProxyEngine On
    ProxyPass / https://123.4.567.890:3000
    ProxyPassReverse / https://123.4.567.890:3000
    ProxyPreserveHost On    

    SSLEngine on
    SSLProxyEngine On
    SSLUseStapling Off
    SSLCertificateFile /root/etc/website.co.uk/ssl/cert.crt
    SSLCertificateKeyFile /root/etc/website.co.uk/ssl/theKey.key
</VirtualHost>

这个预包含工作了大约 2 周并修复了错误,但突然停止工作,我再次收到端口错误,我终生无法弄清楚原因。我认为这可能是由于 Cloudflare 造成的,因为我今天已经设置了它,但是我已将所有 Cloudflare 设置仅设置为 DNS,但我仍然收到错误消息。

谢谢

标签: node.jsapacheexpresssslport

解决方案


将 vhost 文件 proxypass 和 proxypassreverse 更改为使用网站名称而不是 IP,然后将 nodejs 服务器上使用的 SSL 端口更改为 4433,现在它似乎工作正常。


推荐阅读