我使用的是一个非常简单的服务器脚本
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获取相关日志?
答案 0 :(得分:0)
我找到了一个似乎有用的解决方案,但请记住我是一个菜鸟。
只是一些简短的背景。
我没有尝试将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.com,https://example.com),然后他们全部重定向到https://example.com和所有网站根据浏览器,通过安全连接正常获取数据。