使用SSL运行的NodeJS,Apache2代理不起作用

时间:2019-10-29 08:32:32

标签: node.js apache ssl apache2 lets-encrypt

我一直在尝试运行可以通过: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);


0 个答案:

没有答案