Nginx 子文件夹中的 Node.js 应用程序,WSS 连接到同一服务器

德斯穆

在 Apache 服务器上管理我的 Web 项目多年后,我不得不使用 Nginx 将它们移动到新服务器。除了使用 websockets 的那个之外,我已经成功地迁移了所有这些。

该项目是一个基于 web 的扫雷器,使用 websockets 与游戏服务器进行通信。该游戏可通过https://www.my.domain.com/minesweeper访问在它的 client.js 文件中,连接是通过行建立的const ws = new WebSocket('wss://www.my.domain.com:8081/')

服务器使用ws包,这里是 server.js 文件的摘录,位于 web 文件夹之外:

const fs = require('fs')
const https = require('https')
const server = new https.createServer({
  key: fs.readFileSync('/etc/letsencrypt/.../privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/.../fullchain.pem')
})
const wss = new WebSocket.Server({ server })

wss.on('connection', function (ws) {
  ws.on('message', function (data) {
    // ...
  })
  ws.on('close', function () {
    // ...
  })
})

server.listen(8081)

游戏在以前的服务器上使用此配置运行,但我不记得是否必须编辑 Apache conf 文件才能使其运行。

现在,在新服务器上,我有以下配置文件:

server {
    add_header Content-Security-Policy "default-src 'self' *.jquery.com wss: data: blob:;";

    listen 443 ssl;
    listen [::]:443 ssl;

    root /var/www/mydomain;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name www.my.domain.com;

    charset utf-8;
    source_charset utf-8;

    location / {
        rewrite ^/(.*).html$ /index.php?page=$1;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location /minesweeper/ {}

    location ~ /\.ht {
        deny all;
    }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # managed by Certbot
}

在没有任何额外配置的情况下,当我尝试通过其 URL 访问游戏时,websocket 请求不会返回预期的 101 响应代码。Firefox 还会触发“无法与 wss://www.my.domain.com:8081 建立连接”错误。

基于关于 websockets官方 Nginx 教程和关于类似问题的其他 SO 答案,我尝试使用 proxy_* 参数的多种组合编辑我的 Nginx 配置,但没有成功。

但是基于 websocket 服务器和 Nginx 服务器在同一个 IP 上的事实,并且 websocket 服务器正在侦听 8081 端口,Nginx 服务器是否也应该侦听 8081 服务器(如果我将配置编辑为这样做,Nginx 拒绝重新启动,因为 websocket 服务器已经在该端口上侦听,并且互惠)?Nginx 真的是问题还是我错过了另一件事?

提前致谢 !

德斯穆

我确认我不必编辑我的 Nginx 配置。它与代理无关:问题是防火墙不允许 8081 端口。

这是我在我的服务器上执行的命令,我在允许端口之前保存了我的防火墙设置(不确定这个过程是否是最好的,但它有效,连接已经建立,我有我的 101 响应代码):

  • /etc/init.d/iptables save
  • iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
  • /etc/init.d/iptables save
  • /etc/init.d/iptables restart

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Node.js-使用多个HTML文件连接到同一服务器,同一用户

如何将不同的子域指向同一服务器上的不同应用程序?(使用node.js作为代理吗?)

NGINX:使用域/路径在同一服务器上的多个节点js应用程序

Nginx不服务器子文件夹api应用程序(php-fpm)

同一服务器中Rails应用子目录中Wordpress的Nginx配置

从一个Node.js服务器到同一服务器中另一Node.js服务器的调用函数

Nginx反向代理服务Node.js应用程序静态文件

Nginx:在同一服务器上服务多个React应用程序

当图像存储在node.js服务器上载文件夹中时,如何在角度应用程序中显示图像?

Node.js:如何在同一服务器上运行多个不同的应用程序并优化CPU使用率?

从Azure网站上的子文件夹托管的Node.js应用程序

Android应用程序使用Socket.io连接到Node.js服务器

如何配置Nginx服务器以与子文件夹中的React应用一起使用?

使用Docker和NGINX将两个单独的Webpack开发服务器应用程序添加到子文件夹中

node.js 查看文件夹中的文件而不是应用程序

从node.js应用程序中运行一些node.js Web服务器

是否像php一样从Nginx服务Node.js应用程序?

在Nginx服务器中未显示404的react.js应用程序

无法连接到Android中的Node JS服务器

在Node.js + Nginx应用程序的子域中对Jekyll Blog使用相同的样式

如何在同一服务器中使用节点 js 重定向以响应 js 应用程序?

Nuxt.js + Laravel在同一服务器Nginx上

如何在Heroku上从Node.js应用程序的子文件夹重定向到静态javascript应用程序?

通配符子域和同一服务器Nginx中的特定子域配置

Node.js-服务来自同一服务器上运行的tomcat的请求

使用Nginx从同一服务器上服务多个Angular应用

Nginx代理到远程Node.js Express应用程序在子目录中

Nginx - 域上的 WordPress 和子目录中的 Node.js 应用程序

如何正确阻止Node.JS服务器应用程序中的IP地址?