node.js - 使用 SSL 运行的 NodeJS,Apache2 代理不起作用
问题描述
我一直在尝试运行一个可以使用 :x (端口号)正常访问的 NodeJS 应用程序,但它运行在一个子域上
subdomain.domain.com:x
当 NodeJS 应用程序与http
没有 SSL 配置的服务器一起提供时,Apache 配置工作正常并且new.domain.com
被代理subdomain.domain.com:x
就好了。
但是当 NodeJS 应用程序是服务器时https
,Apache 会生成 502 Bad Gateway 错误。下面是我一直在使用的配置。我尝试了一切,但它不起作用。
请注意,我已将原始端口号和子域替换为随机名称,以隐藏真实域名。
<VirtualHost *:443>
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName new.domain.com
SSLProxyEngine On
SSLEngine On
SSLCertificateFile <Path/To/SSLCertificate>/fullchain.pem
SSLCertificateKeyFile <Path/To/SSLCertificateKeyFile>/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ProxyRequests off
ProxyPreserveHost On
ProxyPass / https://subdomain.domain.com:x/
</VirtualHost>
<VirtualHost *:80>
CustomLog ${APACHE_LOG_DIR}/subdomain.domain.com-access.log combined
ErrorLog ${APACHE_LOG_DIR}/subdomain.domain.com-error.log
ServerName new.domain.com
Redirect "/" "https://new.domain.com/"
</VirtualHost>
NodeJS 也在一个非常简单的设置中运行,如下所示;
const https = require("https"),
fs = require("fs");
const options = {
key: fs.readFileSync("/srv/www/keys/my-site-key.pem"),
cert: fs.readFileSync("/srv/www/keys/chain.pem")
};
const app = express();
app.use((req, res) => {
res.writeHead(200);
res.end("hello world\n");
});
app.listen(8000);
https.createServer(options, app).listen(8080);
解决方案
推荐阅读
- html - 如何将此 Amplitude.js json 文件附加到我的 html 代码?
- javascript - JS - 右键单击可拖动模式后如何取消固定鼠标?
- java - 套接字java编程
- flutter - 后台通知触发方法通道
- javascript - axios请求跨域域名报CORS错误
- google-sheets - 保留重复值并从列表中删除
- javascript - 标签内容无法正确显示 CSS 网格区域和 JS
- architecture - 设计指标收集服务
- android - 如何在 Jetpack Compose 中围绕画布移动矩形?
- linux - 用户按 Enter 时如何在终端上打印时间戳