Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Nginx作为忽略websockets的nodej的反向代理_Node.js_Nginx_Express_Websocket_Socket.io - Fatal编程技术网

Node.js 使用Nginx作为忽略websockets的nodej的反向代理

Node.js 使用Nginx作为忽略websockets的nodej的反向代理,node.js,nginx,express,websocket,socket.io,Node.js,Nginx,Express,Websocket,Socket.io,我正在使用nginx1.5作为nodejs express应用程序前面的代理,主要用于提供静态内容。我已成功将http版本升级到1.1,以启用websocket传输 我现在想通过添加反向代理缓存来提高性能。我已经准备好了,但是现在WebSocket似乎被缓存了?是否有一种简单的方法来配置nginx以缓存除websockets之外的所有内容,特别是使用socket.io,包括长轮询回退等 我的配置看起来有点像这样 proxy_cache_path /data/nginx/cache level

我正在使用nginx1.5作为nodejs express应用程序前面的代理,主要用于提供静态内容。我已成功将http版本升级到1.1,以启用websocket传输

我现在想通过添加反向代理缓存来提高性能。我已经准备好了,但是现在WebSocket似乎被缓存了?是否有一种简单的方法来配置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;
    }
}

我不太明白你所说的:

但是现在WebSocket似乎被缓存了

但这可能会有所帮助:

proxy_cache_bypass $http_upgrade;

参考资料:

感谢您的帮助,并对新手提出的问题表示歉意。我对nginx和websockets非常陌生。proxy_cache_bypass解决方案似乎就是我想要的,但是,我仍然有WebSocket的问题。当使用socket.io启动握手时,我现在得到以下错误:;node:../deps/uv/src/unix/stream.c:726:uv\u write:Assertion`stream->write\u queue\u size==0'失败。我想知道我使用的nodejs 0.10.8是否有问题?基本上,在没有代理缓存设置的情况下,一切都可以正常工作,并且会抛出该错误?对不起,我对nodejs没有经验。我不知道这个错误是什么意思。没问题,谢谢你的帮助。我很肯定你正确地回答了最初的问题。