2017-09-16 49 views
0

我正在嘗試讓SSL在Meteor中爲https和websockets工作。我得到這個錯誤:流星/阿波羅:HTTPS和WS的SSL訪問?

(STDERR) Error: listen EACCES 0.0.0.0:443 

這是我的設置。

對於SSL訪問,我已經安裝了nourharidy/meteor-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 

在我有:

//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

你試過什麼來診斷這個問題?你有沒有使用郵差或捲曲看看會發生什麼? SImply傾銷一堆代碼和一條錯誤消息不會讓我們很容易幫到你 – Mikkel

+0

感謝您的建議。我不熟悉使用郵差或捲曲來調試這種情況。提供更多關於如何做到這一點的信息將會是一個好的Google搜索? – VikR

+0

認真嗎?您需要幫助才能使用Google?真?你可以直接去郵遞員,看看它是什麼\t www.getpostman.com – Mikkel

回答

0

解決了它!事實證明,我的服務器設置很好。

服務器端我建立WSS網址像這樣:

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

流星文檔爲absoluteUrl說:

The server reads from the ROOT_URL environment variable to determine where it is running.

在Webstorm我ROOT_URL設置爲https://10.0.nn.nn:3100。但由於某種原因absoluteUrl返回http://10.0.nn.nn:3000。即它有錯誤的端口。

糾正端口後 - 它的工作!

更新:我以爲我已經解決了當我發佈前幾天,但我仍然失去了一些東西。

我現在使用ngrok爲我的開發系統提供SSL,以便與HTTPS和WSS一起使用。

以下是一些細節。

  • 我在localhost上運行流星:3000。
  • 我將「http://localhost:3000」的值分配給ROOT_URL環境變量。
  • 我運行兩個同時ngrok連接,一個用於HTTPS和一個WSS:

./ngrok http 3000 ./ngrok http 3200

  • 這給了我兩個ngrok URL,例如:

Forwarding https://9b785bd3.ngrok.io -> localhost:3000
Forwarding https://ec3d8027.ngrok.io -> localhost:3200

我通過ngrok url訪問我的應用,例如:

https://9b785bd3.ngrok.io

我建立了基於ngrok地址的HTTPS鏈接和WSS鏈接。例如:

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

我希望這是幫助他人尋找到這一點。

0

Stack Overflow的工作方式是你付出了一些努力,並接近問題,我們將幫助你度過最後一刻。就如何使用Google尋求幫助是我們稱之爲脫離主題的。

如果你已經做了谷歌搜索Error: listen EACCES 0.0.0.0:443會產生一堆的結果,其中第一個是這樣的:

Node.js EACCES error when listening on most ports

所以我願意是有益的,但你需要幫助你自己也

+0

感謝這個信息。聽說可以在同一個端口上運行HTTPS和WSS是可以的,我已經將METEOR_PORT和GRAPHQL_SUBSCRIPTION_PORT設置爲3100.現在每個鏈接提供的端口都高於端口1024。但是,我仍然收到錯誤'聽EADDRINUSE ::: 3100'。什麼是解決這個問題的正確方法?請讓我知道,如果我可以提供更多的相關信息。 – VikR

+0

我只是將'METEOR_PORT'設置爲3100,將'GRAPHQL_SUBSCRIPTION_PORT'設置爲3200 - 已經擺脫了這個特定的錯誤。但是,現在又有一個錯誤---可能是不同線程的話題。感謝您的輸入。 – VikR