Node.js 对于两个都需要socket.io的应用程序,如何使用反向代理将NGINX设置到端口80?

Node.js 对于两个都需要socket.io的应用程序,如何使用反向代理将NGINX设置到端口80?,node.js,sockets,nginx,socket.io,reverse-proxy,Node.js,Sockets,Nginx,Socket.io,Reverse Proxy,这件事我已经讨论了好几天了。我靠得太近了,然后一个连接好像断开了,或者找不到socket.io。但也许我做错了 我的NGINX文件如下所示: upstream appOne { server demo.someserver.com:1111; } upstream appTwo { server demo.someserver.com:2222; } location /appOne/ { proxy_set_header Upgrade $http_upgrade;

这件事我已经讨论了好几天了。我靠得太近了,然后一个连接好像断开了,或者找不到socket.io。但也许我做错了

我的NGINX文件如下所示:

upstream appOne {
    server demo.someserver.com:1111;
}

upstream appTwo {
    server demo.someserver.com:2222;
}

location /appOne/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appOne/;
}
location /appTwo/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appTwo/;
}

location /socket.io/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appOne/socket.io/;
}
if ($request_uri == 'appOne') {
    proxy_pass http://appOne/socket.io/;
}
if ($request_uri == 'appTwo') {
    proxy_pass http://appTwo/socket.io/;
}
所以我在这里尝试的是让appOne在demo.someserver.com/appOne的子文件夹中运行,让appTwo在demo.someserver.com/appTwo的子文件夹中运行,但两者都有一个反向代理

所有的连接都很好,除了两个应用都需要socket.io才能运行,而且不需要彼此连接(尽管我开始认为这不是个坏主意)。但目前,由于最后一个NGINX位置,它们都连接到appOne/socket.io/socket.io.js。这会导致连接时出现各种问题,例如套接字连接不在同一端口上等

我试图避免的是将任何前端JS文件中的端口和应用程序名称命名为appOne和appTwo,在这种上下文中可以是clientOne和clientTwo

我确实想到过这样的事情:

upstream appOne {
    server demo.someserver.com:1111;
}

upstream appTwo {
    server demo.someserver.com:2222;
}

location /appOne/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appOne/;
}
location /appTwo/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appTwo/;
}

location /socket.io/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://appOne/socket.io/;
}
if ($request_uri == 'appOne') {
    proxy_pass http://appOne/socket.io/;
}
if ($request_uri == 'appTwo') {
    proxy_pass http://appTwo/socket.io/;
}
但我不知道这到底是怎么回事。有人提出过建议,或者有人尝试过做同样的事情吗


所以我的问题是-如何通过反向代理分别连接到socket.io。或者我应该有一个socket.io连接,并且两个都连接到它?(但我可以在一台服务器上有多个客户端)

您可以在脚本中设置一个自定义路径到
socket.io

设置engine.io和静态文件的路径v 服务。默认为/socket.io

如果未提供任何参数,此方法将返回当前值


来源:

您可以在脚本中将自定义路径设置为
socket.io

设置engine.io和静态文件的路径v 服务。默认为/socket.io

如果未提供任何参数,此方法将返回当前值


来源:

如果需要两个单独的socket.io应用程序,可以在客户端初始化socket.io时通过设置(未记录的)
path
选项来执行此操作

为了保持一致,我将向您提供Nginx配置和节点文件的完整工作示例:

nginx配置:

app1.jsapp2.js(Express+Socket.io示例):

index1.htmlindex2.html:

然后

http://demo.someserver.com/appTwo

您将分别在控制台中看到
1111
2222
,这意味着您有两个独立的socket.io应用程序。

如果您需要两个单独的socket.io应用程序,可以在客户端初始化socket.io时通过设置(未记录的)
path
选项来执行此操作

为了保持一致,我将向您提供Nginx配置和节点文件的完整工作示例:

nginx配置:

app1.jsapp2.js(Express+Socket.io示例):

index1.htmlindex2.html:

然后

http://demo.someserver.com/appTwo

您将分别在控制台中看到
1111
2222
,这意味着您有两个独立的socket.io应用程序。

您能举个例子吗?我尝试过改变路径,但不幸的是我无法让它工作。你能举个例子吗?我尝试过改变路径,但不幸的是我无法让它工作。你救了我!非常感谢你。这让我有90%的路要走。剩下的是我的API和实时预览代码的一些变化…谢谢!完整的例子就是我主要需要的:var socket=io(“/”不客气@darylhedley,我尽力了:)很高兴你的问题解决了。你救了我!非常感谢你。这让我有90%的路要走。剩下的是我的API和实时预览代码的一些变化…谢谢!完整的例子就是我主要需要的:var socket=io(“/”不客气@darylhedley,我尽力了:)很高兴你的问题解决了。
http://demo.someserver.com/appTwo