我有一个使用node.js运行的简单应用程序。下面是我的server.js:
var myApp = require('./lib/myapp')
new myApp({
port: 8000
});
访问该应用程序
我想设置它,因此我可以使用https://myserver.com
访问它我已尝试过在这里提出的问题中回答的各种方法,但我无法使其正常工作。我认为应用程序初始化的方式是原因,但我不确定。
我知道我可以把它放在Apache之后,但我想用节点来做。
如果有人可以为我修改这个server.js,那将是一个很大的帮助!
由于
Noman A.
答案 0 :(得分:0)
https
建议你想通过安全层(端口443)运行它,最好的办法是把它放在apache或更好nginx
之后,让真正的web服务器管理ssl证书等而您的node.js专注于应用程序业务逻辑
如果你想通过node.js look here
来做答案 1 :(得分:0)
myApp是express
/ connect
应用吗?我不喜欢你创建的new
关键字的奇怪构造函数,我们需要看到它的内容才能提供帮助。
8000
更改为80
,但保留http
服务器。 http
换成https
,将80换成443。但是,由于您的客户将首先尝试访问http
,因此您需要将其重定向到您网站的https
版本。如果您以“快速方式”执行此操作,则可以设置相同的应用程序,只需使用http和https服务器进行侦听即可。然后添加一个中间件,将所有http
个请求重定向到https
,您就完成了。看看这个How to force SSL / https in Express.js。
编辑:这个答案有一个更干净的双服务器/单应用程序设置,但不包含任何有关转发请求的内容:Listen on HTTP and HTTPS for a single express app
理想设置导出main.js
中的express / connect app对象。单独的runner.js
只需要应用程序并将其传递给两个服务器(1个http& 1 https)并使用正确的选项。
答案 2 :(得分:0)
感谢大家对这个问题的贡献。我非常感谢所有指针!
特别提到JohnnyHK,他的建议让我走上正轨。我能够使用node-http-proxy解决我的问题。简单有效!以下是我的server.js现在的样子:
var MyApp = require('./lib/app');
var fs = require('fs'),
http = require('http'),
https = require('https'),
httpProxy = require('http-proxy');
var options = {
https: {
key: fs.readFileSync('certs/server.key', 'utf8'),
cert: fs.readFileSync('certs/server.crt', 'utf8'),
ca: fs.readFileSync('certs/ca.crt', 'utf8')
},
target: {
https: true // This could also be an Object with key and cert properties
}
};
var app = new MyApp({
port: 8080
});
var proxy = new httpProxy.HttpProxy({
target: {
host: 'localhost',
port: 8080
}
});
https.createServer(options.https, function (req, res) {
proxy.proxyRequest(req, res)
}).listen(443);
再次感谢大家!
-Noman A。