流星/阿波罗:为HTTPS和SSL WS访问?(Meteor/Apollo: SSL Access

2019-11-04 10:22发布

我试图让SSL流星工作HTTPS和WebSockets的。 我得到这个错误:

(STDERR) Error: listen EACCES 0.0.0.0:443

这里是我的设置。

对于SSL访问我已经安装了nourharidy /流星SSL。 我可以使用任何类似的包或方法,人们已经发现有用!

所要求的nourharidy /流星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',
    });
});

我在想什么?

非常感谢提前对所有的任何信息!

Answer 1:

该方式堆栈溢出的工作原理是,你花心思,和亲近的问题,我们会帮您完成最后一点得到。 询问如何使用谷歌的帮助就是我们所说的题外话。

如果你已经做了谷歌搜索Error: listen EACCES 0.0.0.0:443会产生一堆的结果,其中第一个是这样的:

在大多数端口上侦听时的Node.js EACCES错误

所以,我愿意是有益的,但你需要帮助自己太



Answer 2:

解决它! 事实证明我的服务器设置的罚款。

服务器端我建立WSS网址如下所示:

var websocketUri = Meteor.absoluteUrl('subscriptions').replace(/http/, 'ws').replace('3100', '3200');

流星文档的absoluteUrl说:

服务器从ROOT_URL环境变量读取,以确定它是否正在运行。

在Webstorm我ROOT_URL设置为https://10.0.nn.nn:3100 。 但由于某些原因absoluteUrl被返回http://10.0.nn.nn:3000 。 也就是说,它有错误的端口。

修正后port--它的工作!

更新:我原本以为它解决了,当我发布前几天,但我还是失去了一些东西。

现在,我使用ngrok提供SSL我与HTTPS和WSS应用开发系统。

这里有一些细节。

  • 我在本地主机上运行的流星:3000。
  • 我给你的价值“ 的http://本地主机:3000 ”对ROOT_URL环境变量。
  • 我运行两个同时ngrok连接,一个用于HTTPS和一个WSS:

./ngrok http 3000 ./ngrok http 3200

  • 这给了我两个ngrok URL,例如:

转发https://9b785bd3.ngrok.io - >本地主机:3000
转发https://ec3d8027.ngrok.io - >本地主机:3200

我通过ngrok URL访问我的应用程序,例如:

https://9b785bd3.ngrok.io

我建立我的HTTPS链接,并基于该ngrok地址WSS链接。 例如:

const wssEndpoint = 'wss://ec3d8027.ngrok.io/subscriptions';

我希望这是帮助他人寻找到这一点。



文章来源: Meteor/Apollo: SSL Access for HTTPS and WS?