【发布时间】:2016-01-17 09:52:00
【问题描述】:
所以我有一个像 http://someIp:3000 这样的 node.js 服务器。是否可以在此安装 https 而无需获取域名并在端口 80 上运行?我问这个问题的原因是我有一个在 https 上运行的 php 网站,当我尝试与我的节点服务器通信时,它抱怨你请求了一个不安全的 XMLHttpRequest 端点。
【问题讨论】:
所以我有一个像 http://someIp:3000 这样的 node.js 服务器。是否可以在此安装 https 而无需获取域名并在端口 80 上运行?我问这个问题的原因是我有一个在 https 上运行的 php 网站,当我尝试与我的节点服务器通信时,它抱怨你请求了一个不安全的 XMLHttpRequest 端点。
【问题讨论】:
是的:
var fs = require('fs');
var https = require('https');
var express = require('express');
var socket = require('socket.io');
var storage = require('node-persist');
var port = 8443;
var sslOptions = {
pfx: fs.readFileSync('cert/cert.pfx'),
passphrase: "Node2015"
};
var app = express();
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, *');
next();
});
var server = https.createServer(sslOptions, app);
【讨论】:
您应该配置运行 PHP 的网络服务器以使用反向代理连接到您的 NodeJS 服务器(然后两者都可以通过相同的主机名和端口访问)或使用正确的 CORS 标头配置 NodeJS。
我认为在您的场景中,反向代理会更容易配置。将 NodeJS 配置为仅允许 localhost https 连接,然后将您的 Apache 配置为代理传入的请求。
【讨论】: