首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序可以在运行IIS的同时通过端口80建立Websocket连接吗?

应用程序可以在运行IIS的同时通过端口80建立Websocket连接吗?
EN

Stack Overflow用户
提问于 2021-01-14 13:14:56
回答 3查看 278关注 0票数 0

我们正在开发一个使用统一的多用户虚拟现实系统,遇到了以下问题:

配置

配置如下:

  • 网站-将使用IIS在我们的服务器上发布,供查看者使用他们的浏览器观看节目主持人。
  • 虚拟现实应用-在专用笔记本电脑上由演讲者远程运行。主持人使用虚拟现实耳机探索一个环境,并与查看者分享。主持人连接到主机应用程序,并使用端口80建立websocket连接。
  • 主机应用程序-在我们的服务器上运行,以中继所有VR演示者和浏览器查看器之间的websocket通信。

问题

当我们在服务器上运行主机应用程序时,网络代码无法侦听端口80上的流量。错误是:"An attempt was made to access a socket in a way forbidden by its access permissions"。看来IIS或系统已经完全控制了端口80,并阻止了其他资源的使用。

约束条件

客户端的网络安全限制阻止我们引入第二台服务器来运行主机应用程序(它们只能连接到定义的IP地址列表),并且不能为我们打开新的端口。因此,我们有一个单一的服务器(Windows 2016)和端口80来玩!

是否可以使用IIS (HTTP端口80)远程发布网站,并运行一个应用程序来侦听和通信端口80上的websocket流量?

发展信息

在开发过程中,我们设置了第二台服务器,当我们在该服务器上定位主机应用程序(所有的端口都是80)时,一切都正常工作。此开发服务器不是运行IIS,而是主机应用程序。为了进行测试,我们可以使用我们自己的计算机,并且没有IP限制,所以我们可以将浏览器和演示笔记本电脑指向开发服务器,以便进行websocket通信。

摘要

任何想法,建议或指导将是非常受欢迎的,因为目前我们不知道哪条路可以转!

EN

回答 3

Stack Overflow用户

发布于 2021-01-14 13:28:58

我的建议

  1. 使用另外两个端口来发布服务器和ws(例如90和91),并使用nginx(或者apache?)要按照80端口的协议进行分流,您可以使用以下代码
代码语言:javascript
复制
# code in nginx
location / {#http
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host  $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass http://127.0.0.1:90;# real port of server
            proxy_redirect default;
            #root   html;
            #index  index.html index.htm;
        }
       location /ws{#ws
            proxy_http_version 1.1;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Nginx-Proxy true;
            proxy_redirect off;
            client_max_body_size 10m;
            proxy_pass http://127.0.0.1:91;# real port of ws
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_connect_timeout 300s;
            proxy_read_timeout 300s;
            proxy_send_timeout 300s; 
       }

详细信息以这里(PS:中文)和端口443(https和wss)的方式提供。

  1. 使用其他端口
票数 0
EN

Stack Overflow用户

发布于 2021-01-15 07:54:41

实际上,同一个端口可以处理多个不同的协议,websocket是基于http协议的升级。

但这是不推荐的,因为它可能有一些问题。

  • 一个端口只能由一个进程监视,而IIS中的端口80则由w3svc监视。服务器必须采取某种方法来检测客户端发送的协议。如果再在端口中使用协议,则会增加消耗。
  • 服务器无法支持服务器首先发言的多个协议,因为无法检测客户端的协议。您可以支持具有多个客户端优先协议的单个服务器优先协议(在accept之后添加一个短的延迟以查看客户端是否会发送数据),但这有点不可靠。
票数 0
EN

Stack Overflow用户

发布于 2021-01-15 10:51:46

我希望这有助于那些也希望在其服务器上运行应用程序的人,但发现它无法在端口80/443上侦听,因为端口80/443是为IIS保留的。最后,我解决了以下问题:

我创建了一个新域并将其指向我的new服务器。然后,我在IIS中创建了一个绑定到新域的新网站。我把网站指向一个空文件夹。然后,我下载并安装了Microsoft的IIS URL重写扩展以及应用程序请求路由扩展:

安装这些之后,我可以在IIS中选择我的新网站,并在IIS部分右击新URL重写选项。出现一个Add规则对话框,我可以选择一个反向代理选项,并创建一个简单的规则来将流量重定向到localhost:80,然后再次返回到出站流量。难以置信,成功了!

我只是一个开发人员,试图把一个复杂的项目推向交付,所以这可能有其缺陷,或者您可能知道更好的解决方案,但对我来说,我现在可以继续前进了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65719694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档