2017-08-17 77 views
0

首先,是的,我知道有類似問題的SO上有很多相關問題。在提問之前,我已經經歷了幾乎所有的人。生產實例中找不到socket.io.js

我有一個非常奇怪的問題,其中,生產實例上的服務器不提供socket.io.js文件。

完全相同的代碼適用於我的開發實例。開發和生產實例之間的唯一區別是,產品實例使用nginx代理運行,但我不認爲這應該是問題。

當我試圖訪問https://my-host-name.com/socket.io/socket.io.js

我得到錯誤 「404未找到」

Nginx的日誌給出了這樣的錯誤:

2017/08/17 12:01:28 [error] 30437#0: *2298619 open() "/data/api/current/socket.io/socket.io.js" failed (2: No such file or directory), client: 10.xxx.x.xx, server: , request: "GET /socket.io/socket.io.js HTTP/1.1", host: ""

我是怎麼回事錯在這裏完全一無所知。誰能幫幫我嗎?

這裏是app.js文件我的插座confiiguration:

var server = https.createServer(app.get("httpsOptions"), app); 
var socket = require('socket.io'); 
var io = socket.listen(server); 
server.listen(app.get('port'), function(){ 
    logger.info("Starting the express app..."); 
    logger.info("Express server listening on port " + app.get('port')); 
}); 
require('./routes/sockets/base')(io); // separating the socket.io related code in separate file 

我可以看到我的node_modules已經socket.io,socket.io適配器,socket.io的客戶端和socket.io解析器

+0

您需要socket.io.js請求通過NGINX到你Express服務器(而不是NGINX試圖服務器直接),你需要的路徑與它得到您的明示服務器是'/ socket.io/socket.io.js'。這似乎是一個NGINX配置問題,看起來好像可能是某種多tennant NGINX配置,也在路徑中添加了'/ data/api/current'。 – jfriend00

+0

我想看看nginx的CONF,並添加下面的行: 別名/socket.io/ {化名} /data/api/current/node/node_modules/socket.io-client/dist/ 現在我可以請參閱通過此鏈接提供的socket.io.js文件:https://my-host-name.com/socket.io/socket.io.js 但是,所有輪詢都失敗,出現403禁止的錯誤: 這裏是nginx日誌:「/data/api/current/node/node_modules/socket.io-client/dist//」的目錄索引被禁止, – undefined

回答

1

The only difference between development annd Production instance is that, produciton instance runs using nginx proxy but I do not think that should be the problem.這是一個很大的假設,也是一個錯誤的假設。

您應該使用nginx代理設置開發環境,然後轉移到生產環境。所有靜態文件必須在nginx容器訪問,所以它可以切斷那些靜態文件和他們沒有去你的代碼的NodeJS

而且你需要在下面的指令在你的nginx配置

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade"; 
proxy_http_version 1.1; 

看到這個更多細節https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

+0

OK..so現在我在上面的行中添加了我的nginx,這裏是它是如何看起來像: https://pastebin.com/raw/FJAm6fDT 但現在我得到錯誤: WebSocket連接到 'WSS:/my-host-name/socket.io/ EIO = 3&運輸=網頁套接字&SID = Ni1NmPNYgC8JuYHvAADa' 失敗:在建立連接之前的WebSocket被關閉。 我覺得我現在很接近,但不知道是什麼原因造成這個問題 – undefined

+0

檢查兩個nginx的日誌和側面的NodeJS –

+0

https://pastebin.com/raw/eumXXN37 我看到超時在nginx的日誌和節點js日誌中的多個用戶連接消息。 – undefined