我正在尝试让HTTPS在node.express.js上工作,但我无法弄清楚。
这是我的app.js
代码。
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
当我运行它时,它似乎仅响应HTTP请求。
我写了简单的node.html" target="_blank">js
基于香草的HTTPS应用程序:
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
当我运行此应用程序时,它 确实 响应HTTPS请求。请注意,我认为fs结果上的toString()并不重要,因为我使用了两者的组合,但仍然没有es
bueno。
编辑添加:
对于生产系统,最好使用Nginx或HAProxy将请求代理到您的nodejs应用。您可以设置nginx来处理ssl请求,而只对您的节点app.js说HTTP。
编辑添加(4/6/2015)
对于使用AWS的系统,最好使用EC2弹性负载均衡器来处理SSL终止,并允许向EC2
Web服务器的常规HTTP通信。为了进一步提高安全性,请设置安全组,以便仅允许ELB将HTTP流量发送到EC2实例,这将防止外部未加密的HTTP流量攻击您的计算机。
在express.js(版本3起)中,应使用以下语法:
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
// your express configuration here
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
httpServer.listen(8080);
httpsServer.listen(8443);
这样,您就可以向本地http / https服务器提供快速中间件
如果您希望您的应用程序在1024以下的端口上运行,则需要使用sudo
命令(不推荐)或使用反向代理(例如nginx,haproxy)。
问题内容: 我在服务器上运行了一个Node.js / Express.js应用程序,该应用程序仅在端口3000上运行,我试图找出原因。这是我发现的: 如果不指定端口(),则该应用会运行,但网页不会加载。 在端口3001()或任何其他未使用的端口上,应用程序运行,但网页未加载。 在端口2999上,该应用程序引发错误,因为其他人正在使用该端口。 在端口3000上,该应用程序运行,并且网页加载正常。 我
问题内容: 我需要帮助来了解Web应用程序的会话概念。我正在使用Express 3.0运行Node.js服务器。 我的目标是: 为每个登录的用户创建一个会话 存储此会话,并将其用于验证用户是否已登录(防止同时使用同一用户的两个设备)并限制对某些页面的访问(通过将会话ID与其他数据匹配) 我将使用MemoryStore保存会话(似乎最简单)。如果上述目标有意义,您能否提供有关如何实现这些目标的详尽解
问题内容: 为了避免同域AJAX问题,我希望我的node.js Web服务器将所有请求从URL转发到另一个服务器,例如,并透明地将与该远程服务器返回的相同的内容返回给用户。 所有其他网址(位于旁边)均应直接提供,不能进行代理。 如何使用node.js + express.js实现此目的?您可以举一个简单的代码示例吗? (Web服务器和远程服务器都在我的控制下,都运行带有express.js的nod
我的服务器上运行了一个node.js/express.js应用程序,它只在3000端口上工作,我正在试图找出原因。以下是我的发现: 在不指定端口()的情况下,应用程序会运行,但网页不会加载。 在端口3001()或任何其他未使用的端口上,应用程序运行但网页不加载。 在端口2999上,应用程序抛出错误,因为其他东西正在使用该端口。 在端口3000上,应用程序运行,网页加载良好。 我知道Express应
Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用。Express 不对 node.js 已有的特性进行二次抽象,我们只是在它之上扩展了Web应用所需的功能。丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单 示例代码: var express = require('express')va
问题内容: 我正在尝试在node.js中构建一个Web服务器,该服务器将支持跨域脚本编写,同时仍从公共目录中提供静态文件。我正在使用express.js,但不确定如何允许跨域脚本()。 问题答案: 查看来自enable-cors.org的示例: 在node.js上的ExpressJS应用中,对路由执行以下操作: 首次呼叫()应该在应用中的所有其他路由(或至少要启用CORS的路由)之前进行。 [编辑