我正在尝试在Meteor中使用SSL来运行https和websockets。我收到了这个错误:
(STDERR) Error: listen EACCES 0.0.0.0:443
这是我的设置。
对于SSL访问,我安装了nourharidy / meteor-ssl。我可以使用人们认为有用的任何类似的包或方法!
根据nourharidy / meteor-ssl的要求,server/main.js
我有:
SSL('/path/to/private/server.key','/path/to/private/server.crt', 443);
以下是我的其余设置:
我的ROOT_URL环境变量是:
https://10.0.1.10:443 //I’m using my Mac’s ip address so that another Mac can access it
在imports/startup/server/index.js
我有:
//SET UP APOLLO QUERY / MUTATIONS / PUBSUB
const USING_HTTPS = true;
const httpProtocol = USING_HTTPS ? "https" : "http";
const localHostString = '10.0.1.10' //I’m using my Mac’s ip address so that another Mac can access it
const METEOR_PORT = 443;
const GRAPHQL_SUBSCRIPTION_PORT = 4000;
const subscriptionsEndpoint = `wss://${localHostString}:${GRAPHQL_SUBSCRIPTION_PORT}/subscriptions`;
const server = express();
server.use('*', cors({ origin: `${httpProtocol}://${localHostString}:${GRAPHQL_SUBSCRIPTION_PORT}` }));
server.use('/graphql', bodyParser.json(), graphqlExpress({
schema
}));
server.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
subscriptionsEndpoint: subscriptionsEndpoint
}));
// We wrap the express server so that we can attach the WebSocket for subscriptions
const ws = createServer(server);
ws.listen(GRAPHQL_SUBSCRIPTION_PORT, () => {
console.log(`GraphQL Server is now running on ${httpProtocol}://${localHostString}:${GRAPHQL_SUBSCRIPTION_PORT}`);
// Set up the WebSocket for handling GraphQL subscriptions
new SubscriptionServer({
execute,
subscribe,
schema
}, {
server: ws,
path: '/subscriptions',
});
});
我错过了什么?
非常感谢所有人提供任何信息!
答案 0 :(得分:0)
Stack Overflow的工作方式是你付出一些努力,并接近问题,我们将帮助你完成最后一点。寻求有关如何使用Google的帮助是我们所说的偏离主题。
如果你已经对Error: listen EACCES 0.0.0.0:443
进行了Google搜索,那么会产生一系列结果,第一个是:
Node.js EACCES error when listening on most ports
所以我愿意提供帮助,但你也需要帮助自己
答案 1 :(得分:0)
解决了!事实证明我的服务器设置很好。
服务器端我正在构建WSS网址:
var websocketUri = Meteor.absoluteUrl('subscriptions').replace(/http/, 'ws').replace('3100', '3200');
absoluteUrl的Meteor文档说:
服务器从ROOT_URL环境变量中读取以确定它的运行位置。
在Webstorm中,我将ROOT_URL设置为https://10.0.nn.nn:3100
。但由于某些原因,absoluteUrl正在返回http://10.0.nn.nn:3000
。即它有错误的端口。
更正端口后 - 它正在工作!
更新:我想我几天前发布的时候已经解决了,但我还是遗漏了一些东西。
我现在正在使用ngrok向我的开发系统提供SSL,以便与HTTPS和WSS一起使用。
以下是一些细节。
./ngrok http 3000
./ngrok http 3200
转发https://9b785bd3.ngrok.io - >本地主机:3000
转发https://ec3d8027.ngrok.io - > localhost:3200
我通过ngrok网址访问我的应用,例如:
我根据ngrok地址构建我的HTTPS链接和WSS链接。例如:
const wssEndpoint = 'wss://ec3d8027.ngrok.io/subscriptions';
我希望这对其他人有所帮助。