2013-05-29 87 views
1

我使用nginx 1.5作爲nodejs express應用前的代理,主要是爲靜態內容提供服務。我已成功將http版本升級到1.1以啓用websocket傳輸。使用Nginx作爲nodej忽略websockets的反向代理

我現在想通過添加反向代理緩存來提高性能。我有這個地方,但現在websockets似乎被緩存?有沒有簡單的方法來配置nginx緩存一切,除了websockets,特別是使用socket.io,包括長輪詢後備等。

我的配置看起來有點像這樣;

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; 

# express/socket.io app 
upstream app { 
    server 127.0.0.1:3000; 
} 

# the nginx server instance 
server { 
    listen 0.0.0.0:80; 
    server_name server-name.com; 

    location/{ 
     #access_log off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_set_header X-NginX-Proxy true; 

     proxy_pass http://app/; 
     proxy_redirect off; 

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

     proxy_cache STATIC; 
     proxy_cache_valid 200 1d; 
     proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; 
    } 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|flv|swf|html|htm|mp3|webm|ogv|ogg|mp3|m4a)$ { 
     root /var/www/server-name.com/public; 
    } 
} 

回答

3

我不太明白你是什麼意思:

但現在的WebSockets似乎被緩存?

但也許這將幫助:

proxy_cache_bypass $http_upgrade; 

參考:http://nginx.org/r/proxy_cache_bypass

+0

感謝您的幫助和道歉的新手問題。我對nginx和websockets很陌生。 proxy_cache_bypass解決方案似乎是我正在尋找的,但是,我仍然有websockets的問題。 當使用socket.io啓動握手時,我現在得到以下錯誤; node:../deps/uv/src/unix/stream.c:726:uv__write:Assertion'stream-> write_queue_size == 0'失敗。 –

+0

我在想,如果它可能是我使用的nodejs 0.10.8的問題? https://github.com/joyent/node/issues/5573 基本上,一切都沒有proxy_cache設置,並引發與他們的錯誤? –

+0

對不起,我沒有經歷過nodejs。我不知道這個錯誤是什麼意思。 – VBart