使用Node.js设置获取内部服务器错误(500)以使用HTTPS

时间:2018-05-13 11:55:52

标签: node.js .htaccess https

我使用的是一个非常简单的服务器脚本

const https = require('https');
const fs = require('fs');

var options = options = {
    key: fs.readFileSync(__dirname+'/certs/private_key.pem'),
    cert: fs.readFileSync(__dirname+'/certs/my_cert.crt'),
    ca: fs.readFileSync(__dirname+'/certs/my_bundle.ca-bundle'),
}

https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(3000,'example.com');

此示例取自https://helpdesk.ssls.com/hc/en-us/articles/115001603071-How-to-install-a-certificate-on-Node-js

我的.htaccess看起来像这样

RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com:3000/$1 [L,P,QSA]

目标是使用HTTPS将所有流量重定向到服务器。当我执行命令

node server.js

没有错误,服务器正在侦听。当我尝试使用

通过浏览器进行连接时
https://example.com

我收到内部服务器错误,我无法弄清楚问题可能是什么,因为我无法弄清楚如何从node.js获取任何日志。

如果我将服务器设置为通过常规HTTP进行侦听并将.htaccess重写规则设置为通过常规HTTP重定向到站点,则可以正常工作。我无法弄清楚我生活中的错误,因为当我使用证书在本地测试服务器时,它似乎可以通过HTTPS工作(即https://localhost:3000,即使浏览器认为证书无效)。知道问题是什么,无论如何从node.js获取相关日志?

1 个答案:

答案 0 :(得分:0)

我找到了一个似乎有用的解决方案,但请记住我是一个菜鸟。

只是一些简短的背景。

  • Godaddy目前正在托管我的文件(我是最便宜的计划)。

我没有尝试将node.js设置为HTTPS服务器,而是将其作为常规HTTP服务器运行。对于SSL功能,我使用CPanel中名为“SSL / TLS”的GoDaddy配置工具安装证书(私钥,捆绑等)。完成后,我可以输入:

https://example.com

并且连接显示为安全。为了使这个工作与常规node.js HTTP服务器,我不得不修改主.htaccess文件中的重写规则。即

RewriteEngine on
RewriteCond %{HTTPS} off                                   # To ensure no redirect loop
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]        # Redirect to the secure site
RewriteRule (.*) http://example.com:3000/$1 [L,P,QSA]      # Internally, however, pass all request to the regular HTTP node.js server listening on port 3000

现在我可以在浏览器中输入任何网址(例如www.example.com,example.com,http://example.comhttps://example.com),然后他们全部重定向到https://example.com和所有网站根据浏览器,通过安全连接正常获取数据。