它可以服务于node.js,如this example,但是以有限的方式.
但是Nginx是代理websockets的apparently unable.
我发现可能有用的唯一一件事就是按this article使用HAProxy前端 – 但它是从2011年10月6日开始的.
解
(有关完整解决方案和详细信息,请参阅https://github.com/bangkok-maco/barebone-node)
ip测试架构:
> 127.0.0.12 – www.chat.nit – public,在/ etc / hosts和haproxy中
> 127.0.1.12 – 内部Nginx Web服务器
> 127.0.2.12 – 内部聊天服务node.js socket.io
/etc/haproxy/haproxy.cfg:
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
/etc/Nginx/sites-enabled/www.chat.nit
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;
}
}
chat(node.js):server.js
var app = require('http').createServer()
, io = require('socket.io').listen(app);
app.listen(8000,'127.0.2.12');
io.sockets.on('connection', function(socket) {
...
};
chat:client.html
<head>
<script src="/scripts/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://www.chat.nit:80');
...
</script>
</head>
笔记:
>将socket.io客户端js链接到scripts /目录
/…/scripts$ln -s ../node_modules/socket.io/node_modules/socket.io-client/dist/ socket.io
> / etc / default / haproxy(与文本相反,必须设置为完全工作)
ENABLED = 1
>这个版本的haproxy没有记录.发现kvz’s写了如何通过127.0.0.1使用rsyslogd,但无法让它飞.
>这个解决方案正在运行 – 而不是系统管理员的质量. (增强功能超过欢迎.)
解决方法:
这是我的(旧的和用于测试目的)HAProxy配置代理WebSockets和普通的HTTP请求.
global
maxconn 4096
nbproc 2
daemon
user nobody
defaults
mode http
frontend app
bind 0.0.0.0:8000
mode tcp
timeout client 86400000
default_backend www_backend
acl is_websocket path_beg /sockets
use_backend socket_backend if is_websocket
tcp-request inspect-delay 500ms
tcp-request content accept if HTTP
backend www_backend
balance roundrobin
option forwardfor
mode http
option httplog
option httpclose
timeout server 30000
timeout connect 4000
server w1 localhost:8080 weight 1 maxconn 1024 check
backend 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 s1 localhost:8081 weight 1 maxconn 1024 check
请注意,我通过查看路径(acl is_websocket path_beg / sockets line)来识别请求是否为WS.这可以替换为例如:
acl is_websocket hdr(Upgrade) -i WebSocket
或这个:
acl is_websocket hdr_beg(Host) -i ws
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。