在同一服务器上运行websocket服务器和http服务器


8

我正在使用nginx来提供PHP应用程序的实例,并且同时运行Ratchet应用程序来侦听WebSocket连接。问题是,这两个实例都使用相同的端口(80)。

如何设置服务器,以便同时为我和她提供服务?

编辑:只是回头看到这个问题已经被否决了几次,可以理解的是,我并没有以明确的方式提出这个问题。我对此表示歉意。我确实做了尽职调查。我会尝试澄清我的要求,我可能会误解了websocket协议的某些方面,在这种情况下,请纠正我:

我很清楚,只有一个进程在侦听一个特定的端口,实际上我遇到的问题是整个websocket的事情,据我了解,websocket请求始于HTTP握手,此后便有了机制将该会话“升级”到特定端口。

据我了解,这种升级机制似乎是由Web服务器处理的。那么,如何配置nginx来处理此过程?

总而言之,我担心在80以外的端口上运行websocket服务器的一件事是端口被阻塞的可能性。这种担心是没有根据的吗?关于我应该如何设置的任何建议?


that_guy-请查看serverfault.com/help/how-to-ask-确保在发布之前进行尽职调查。在我们喜欢人们提出问题的同时,我们也喜欢人们做作业。
ETL 2014年

Answers:


16

一个非常书面的问题,但是我要寻找的术语是反向代理。

基本上,就像nginx如何基于路径或主机名将不同的请求转发到Web应用程序的多个实例一样,它也可以配置为将请求“转发”到Websocket服务器实例。例如:

location /socket {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

upstream websocket{
    server localhost:8000;
}

map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' close;
}

HTTP请求http://hostname将提供给通常的html页面,而websocket连接wss://hostname/socket将转发到同一服务器上侦听端口8000的websocket实例。


巨大的帮助!Thanxx
gunjot singh

该位置块内的另一个有用选项是proxy_read_timeoutproxy_write_timeout以防止不活动时断开连接。
六。

未解决问题所需的帮助!
Nɪsʜᴀɴᴛʜ

2

服务器不能有两个不同的软件在同一端口/ IP地址上侦听。否则,如果多个应用程序可以绑定到同一端口,如何将流量路由到应用程序XYZ?

您可以从端口(计算机网络)中了解有关端口的更多信息。

您需要执行以下任一操作:

  1. 对两个应用程序之一使用不同的端口,并允许它通过防火墙。
  2. 使用两个不同的IP地址-并将每个应用程序绑定到各自的IP地址。

您的防火墙仅需要根据您的设置进行配置。


您可以提供更多信息吗?会引起防火墙问题吗?避免websocket的优势之一是避免这种情况吗?
hndr 2014年

5
可以共享端口,因为您可以将HTTP服务器和Websocket服务器都放在一个进程中。
和平者

0

您有两种选择:

  1. 将一个绑定到另一个端口(例如8000)
  2. (如果可能)将其他IP地址添加到服务器,并将Web服务器和WebSocket服务器绑定到其他IP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.