node.js - 在 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,但我仍然收到错误消息。
谢谢
解决方案
将 vhost 文件 proxypass 和 proxypassreverse 更改为使用网站名称而不是 IP,然后将 nodejs 服务器上使用的 SSL 端口更改为 4433,现在它似乎工作正常。
推荐阅读
- python - 使用 setuptools 复制非 .py 文件
- sql-server - SQL Server 不显示服务器属性选项
- java - 如何根据表头制作 pojo 类?
- c# - Unity 中的对象显示在编辑器中,但在附加脚本时不会在 Android 上呈现
- javascript - NestJS throw from ExceptionFilter
- windows - 修改shell脚本以在windows中执行
- java - MIDI 乐器不适用于 javax.sound.midi.MidiChannel
- c# - 无法从 Json 序列化 IConfigurationSection
- c# - 避免自动回传asp.net
- python - numpy.insert 的性能取决于数组大小 - 解决方法?