2013-05-29 3 views
1

Я использую nginx 1.5 в качестве прокси-сервера перед узлом expressjs express, в основном для обслуживания статического контента. Я успешно обновил http-версию до версии 1.1, чтобы включить перенос websocket.Использование Nginx в качестве обратного прокси для nodejs, игнорирующего websockets

Теперь я хотел бы увеличить производительность, добавив обратное прокси-кэширование. У меня это на месте, но теперь веб-узлы, похоже, кэшируются? Есть ли простой способ настроить nginx для кэширования всего, кроме веб-узлов, в частности с помощью socket.io, включая резервные копии с длинным опросом и т. Д.?

My config выглядит немного как это;

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: Утверждение 'stream-> write_queue_size == 0 'не удалось. –

+0

Мне интересно, могут ли быть проблемы с nodejs 0.10.8, которые я использую? https://github.com/joyent/node/issues/5573 По сути, все работает без параметров proxy_cache и выдает эту ошибку с ними? –

+0

Извините, я не испытываю в nodejs. Я понятия не имею, что означает эта ошибка. – VBart

Смежные вопросы