gpt4 book ai didi

node.js - nginx、node.js 和 socket.io - 有工作婚姻吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:36 25 4
gpt4 key购买 nike

nginx 是一个 killer 级的静态文件服务器。

它可以服务于 node.js,如 this example , 但以有限的方式。

但是 nginxapparently unable代理 websockets

我发现唯一可行的方法是使用 HAProxy前端根据 this article - 但它是从 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 网络服务器
  • 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;
}
}

聊天(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) {
...
};

聊天:client.html

<head>
<script src="/scripts/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://www.chat.nit:80');
...
</script>
</head>

注意事项:

  1. 将socket.io客户端js链接到scripts/目录

    /.../scripts$ ln -s ../node_modules/socket.io/node_modules/socket.io-client/dist/socket.io

  2. /etc/default/haproxy(与文本相反,必须设置为完全)

    启用=1

  3. 此版本 haproxy 未记录。找到 kvz's写下如何通过 127.0.0.1 使用 rsyslogd,但无法让它运行。

  4. 此解决方案有效 - 无法确定系统管理员的质量。 (非常欢迎增强功能。)

最佳答案

从 v1.3.13 开始,您似乎可以通过 nginx 代理 WebSockets

参见 http://nginx.org/en/docs/http/websocket.html了解更多详情

关于node.js - nginx、node.js 和 socket.io - 有工作婚姻吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com