2012-03-08 64 views
1

我用我的本地設置沒有nginx來服務我的node.js應用程序,我使用的是socket.io,性能非常好。socket.io使用nginx後響應慢

現在,我使用nginx的來代理我的請求,我看到socket.io有一個巨大的響應時間,這意味着我的網頁是越來越呈現速度快,但socket.io呈現的數據量級比以前慢。

我使用NGINX 1.1.16,這裏是通過conf,

gzip on; 

server { 
    listen  80; 
    server_name localhost; 

    #charset koi8-r; 

    access_log logs/host.access.log main; 

    location/{ 
     proxy_pass http://localhost:9999; 
     root html; 
     index index.html index.htm; 
    } 

即使一切正常,我有2個問題,

  1. socket.io響應比以前慢。 使用NGINX,響應 時間約12-15秒和沒有,它幾乎是300毫秒。用apache基準測試了這個 。

  2. 我在控制檯,這是不存在使用 NGINX前看到這條消息,

    [2012-03-08 09:50:58.889] [INFO] console - warn - 'websocket connection invalid' 
    

回答

0

是從NGINX或SocketIO控制檯消息?

NGINX代理不會說HTTP 1.1,這可能是網絡套接字不能正常工作的原因。

更新: 發現了一個博客帖子大約是:http://www.letseehere.com/reverse-proxy-web-sockets

提議的解決方案: http://blog.mixu.net/2011/08/13/nginx-websockets-ssl-and-socket-io-deployment/

+0

該信息由Node.js應用程式(而不是從NGINX)..所以你的意思是說,我沒有得到通過WebSocket的數據,而是通過一些其他的傳輸機制?我如何檢查? – user644745 2012-03-08 05:32:30

+0

是的,這是有道理的。是的,你沒有通過web套接字獲取數據,但NGINX仍然試圖轉發數據包,即使它不理解它。它錯誤地將HTTP 1.1 web套接字請求轉換爲HTTP 1.0。到socket.io,這是打破。 – 2012-03-08 09:00:56

+0

解決方法是配置NGINX而不是在應用層上工作,它應該在傳輸層上工作。詳細的說明在我的答案的鏈接。 – 2012-03-08 09:08:56

3

你可以嘗試添加:

proxy_buffering off; 

the docs的信息,但我在各種論壇上看到一些緩衝會增加某些情況下的響應時間。

+1

這個工作對我來說,我使用的是webpack-hot-middleware – hisland 2016-11-05 05:18:30