nginx
— отличный статический файловый сервер.
он может обслуживать node.js
, как в этом примере, но ограниченным образом.
но nginx
явно не можетпроксировать веб-сокеты
.
единственное, что, как я обнаружил, может работать, это использование интерфейса HAProxyв соответствии с этой статьей— но это от 6 октября 2011 года.
этот имеетявляется распространенной проблемой, но я не нашел очень распространенного решения.
(полное решение и подробности см. в https://github.com/bangkok-maco/barebone-node)
Схема тестирования ip:
global
maxconn 4096
nbproc 2
daemon
# user nobody
log 127.0.0.1 local1 notice
defaults
mode http
# listen on 127.0.0.12:80
frontend app
bind 127.0.0.12:80
mode tcp
timeout client 86400000
default_backend www_backend
acl is_chat hdr_dom(Host) chat
acl is_websocket path_beg /socket.io
use_backend chat_socket_backend if is_websocket is_chat
tcp-request inspect-delay 500ms
tcp-request content accept if HTTP
# ngnix on 127.0.1.12:80
backend www_backend
balance roundrobin
option forwardfor
mode http
option httplog
option httpclose
timeout server 30000
timeout connect 4000
server w1 127.0.1.12:80 weight 1 maxconn 1024 check
# node (socket.io) on 127.0.2.12:80
backend chat_socket_backend
balance roundrobin
mode http
option httplog
option forwardfor
timeout queue 5000
timeout server 86400000
timeout connect 86400000
timeout check 1s
no option httpclose
option http-server-close
option forceclose
server s14 127.0.2.12:8000 weight 1 maxconn 1024 check
server {
listen 127.0.1.12:80;
root /data/node/chat;
index client.html;
server_name www.chat.nit;
# favicon.ico is in /images
location = /favicon.ico$ { rewrite /(.*) /images/$1 last; }
# standard includes
location ^~ /(css|images|scripts)/ {
try_files $uri =404;
}
# html page (only in root dir)
location ~ ^/([-_a-z]+).html$ {
try_files $uri =404;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
}
var app = require('http').createServer()
, io = require('socket.io').listen(app);
app.listen(8000,'127.0.2.12');
io.sockets.on('connection', function(socket) {
...
};
примечания:
ссылка js-клиента socket.io в каталог scripts/
/.../scripts$ ln -s ../node_modules/socket.io/node_modules/socket .io-client/dist/ socket.io
/etc/default/haproxy (вопреки тексту, должен работать вообще)
ENABLED=1
эта версия haproxy не Ведение журнала. нашел запись kvzо том, как использовать rsyslogd
через 127.0.0.1, но не смог запустить.
это решение работает— конечно, не качество системного администратора. (улучшения более чем приветствуются.)