我一直在尝试运行可以通过:x(端口号)正常访问的NodeJS应用程序,但是该应用程序在
的子域中运行subdomain.domain.com:x
当NodeJS应用程序与没有SSL配置的http
服务器一起使用时,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);