AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[websocket](server)

Martin Hope
q0987
Asked: 2022-02-22 07:23:24 +0800 CST

如何使用 Windows 中的智能 websocket 客户端连接到 virtualbox 上正在运行的 websocket 服务器?

  • 1

这是我的设置:

  1. VirtuablBox 6.0 中的 Windows 8.1 和 Ubuntu 18.04
  2. 在 VirtuablBox 中的 127.0.0.1:8083 处运行 websocket 服务器
  3. 在 VirtuablBox 中,我可以连接到 websocket 服务器websocat ws://127.0.0.1:8083

为了让我通过在 Windows 主机上运行的 Chrome 扩展(即智能 Websocket 客户端)连接到 websocket 服务器,我应该使用什么设置。

我尝试在 Smart Websocket Client 中连接到“127.0.01:8083”,但显示错误:

构造“WebSocket”失败:URL“127.0.01:8083”无效。

谢谢

virtualbox localhost websocket
  • 1 个回答
  • 787 Views
Martin Hope
RoyalGoose
Asked: 2021-12-14 07:24:19 +0800 CST

通过 Apache 向 Socket.IO 应用程序发送请求时出现“错误请求”

  • 0

我有的

我有Socket.IO来自模板的应用程序

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);

io.on('connection', (socket) => {
  console.log('a user connected');
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

我配置了Apache

<VirtualHost *:443>
  ServerName ws.domain.com
 
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:3000/
  ProxyPassReverse / http://127.0.0.1:3000/

  SSLEngine on
  SSLCertificateFile /root/origin.pem
  SSLCertificateKeyFile /root/private.key
</VirtualHost>

当我尝试通过邮递员发送请求时,localhost:3000一切正常

在此处输入图像描述

在此处输入图像描述

但是当我尝试向我发送请求时,ws.domain.com我总是得到400 Bad Request

在此处输入图像描述

在此处输入图像描述

我试过的

  1. 我试图从文档中配置 Apache这对我没有帮助
  2. 我尝试使用Nginx并从文档中对其进行了配置,但它也对我没有帮助
  3. 我试图在FlaskwithPySocketIO和 with上重写服务器flask-socketio,并得到同样的错误

我已经完全绝望了,不明白问题出在哪里。

PS如果这很重要,我使用CentOS 7. 我通过 代理域,Cloudflare并且 websockets 当然是连接的

PSS 我在服务器上的所有其他 HTTP 应用程序都可以正常工作(通过 Apache),问题只出在 websockets

proxy nginx apache-2.4 websocket socket.io
  • 1 个回答
  • 1096 Views
Martin Hope
mirzaD14
Asked: 2021-04-26 07:10:29 +0800 CST

如何在 EC2 实例上打开套接字?

  • 1

我想将网络摄像头视频从我的笔记本电脑发送到 aws EC2 实例。

我正在尝试遵循此处的建议和此处的代码。

我面临的问题是我不知道如何打开套接字并监听 EC2 上的传入流量。我的 EC2 是一个 Amazon Linux 免费套餐实例。无论我尝试什么,我都无法让它工作。

我添加了一个入站规则以允许我想监听的端口上的 TCP 流量。

如果有帮助,绑定到端口似乎不是问题,但似乎代码卡在socket.accept()链接 2 的代码行上。

如果有人向我展示如何正确执行此操作,我将不胜感激。

amazon-ec2 socket amazon-web-services websocket
  • 2 个回答
  • 1865 Views
Martin Hope
Satish Umagol
Asked: 2021-01-21 21:12:17 +0800 CST

生产中的 WSS 连接问题

  • 1

我使用 Angular8 作为前端,使用 Nodejs 作为后端

我已在生产中配置 WSS,但与客户端的连接无法正常工作,在一个页面连接正常但在另一页面连接不工作。

websocket 和服务器在同一个端口上运行

Ws(localhost) 一切正常

我们在后端使用的包

https://www.npmjs.com/package/ws

后端代码:

express = require('express');
app = express();
const http = require('http');
const port = 8080;
const fs = require('fs');
const certificate = {
 cert: fs.readFileSync(''),
 key: fs.readFileSync('')
}
const httpServer = http.createServer(app,certificate);

var server = require('ws');

var s =  new server.Server({ server:httpServer },{
  rejectUnauthorized: false
});
s.on('connection', function (ws) {
    ws.on('message', function (message) {
         var obj = JSON.parse(message);
          if (obj.messagetype == "test") {
              //send data
            }     
    }
}

httpServer.listen(port);

前端代码

export class WebsocketService {
constructor() { }
private subject: Rx.Subject<MessageEvent>;

public connect(url): Rx.Subject<MessageEvent> {
  if (!this.subject) {
    this.subject = this.create(url);
  }
 return this.subject;
}

private create(url): Rx.Subject<MessageEvent> {
  let ws = new WebSocket(url);

  let observable = Rx.Observable.create((obs: Rx.Observer<MessageEvent>) => {
   ws.onmessage = obs.next.bind(obs);
   ws.onerror = obs.error.bind(obs);
   ws.onclose = obs.complete.bind(obs);
 return ws.close.bind(ws);
});
  let observer = {
  next: (data: Object) => {
   if (ws.readyState === WebSocket.OPEN) {
      ws.send(JSON.stringify(data));
    }
  }
 };
  return Rx.Subject.create(observer, observable);
  }
 }

const CHAT_URL = "wss://cen.abcuae.com/";

export class SockoneService {

public messages: Subject<Message>;
public messages2: Subject<Message>;

constructor(wsService: WebsocketService) {
 this.messages = <Subject<Message>>wsService.connect(CHAT_URL).pipe(map(
   (response: MessageEvent): Message => {
     let data = JSON.parse(response.data);
     return data;
   }));
   this.messages2 =  this.messages;
 }

这是 /etc/nginx/sites-available/default 下的配置

server {

listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/cen.abcuae.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/cen.abcuae.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

server_name cen.abcuae.com;

location / {
    
            proxy_pass http://0.0.0.0:8080; #whatever port your app runs on
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_read_timeout 3600; 

} 
}
server {
listen 443;
listen [::]:443 ssl;

 server_name cen.abcuae.com;
    ssl_certificate /etc/letsencrypt/live/cen.abcuae.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/cen.abcuae.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by C


location /websocket {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  
  proxy_set_header Host $host;
  proxy_pass https://cen.abcuae.com:5000;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
}
}
ssl nginx node.js websocket angular
  • 1 个回答
  • 283 Views
Martin Hope
glass
Asked: 2020-10-29 02:30:23 +0800 CST

如何创建 websocket 后端?

  • 0

我对这个话题一无所知。我在 server_1 上有一个使用 Mosquitto 的有效 websocket 连接。需要发布 websocket 数据的 webapp 在 server_2 中,在 Nginx 反向代理后面访问。

现在,在 LAN 中,一切都可以使用未加密的连接,但我需要对其进行加密才能在互联网上发布它,所以我需要使用 wss 协议。

我搜索 Nginx + Websocket 教程,每个人都提到了 websocket 的 http 后端(https://www.nginx.com/blog/websocket-nginx/)。如何设置http后端?我只有“wss://...”Mosquitto 地址。

nginx websocket
  • 1 个回答
  • 358 Views
Martin Hope
rynop
Asked: 2020-09-23 06:54:12 +0800 CST

Nginx 可以限制传入的 websocket 消息大小吗?

  • 1

在JS WebSocket 库中,您可以通过maxPayload 选项限制允许的最大传入消息大小。

我想在我的 Nginx 反向代理层中施加这个限制,然后再到达我的应用程序服务器。

Nginx 有类似的概念吗?client_max_body_size( doc )是否适用于传入的 websocket 消息?

nginx websocket
  • 2 个回答
  • 1279 Views
Martin Hope
DevelJoe
Asked: 2020-05-20 09:19:55 +0800 CST

在 Apache Web Server 前面配置 NGINX 反向代理(启用 websockets)

  • 0

根据 stackoverflow 论坛成员的推荐,我在此论坛中提出以下问题,它显然更适合(我是该论坛的新手)。

我到底想要什么:

我网站的特定页面应从 Web 服务器加载其内容(html 结构,表示聊天窗口),但其聊天功能,在服务器端(放置在同一 Web 服务器上)以 PHP Ratchet 脚本的形式显示,应该可以工作通过 WebSocket 连接。

换句话说,对于这个特定页面,Web 服务器和 WebSocket 连接应该同时工作,而我只有一个 Apache (2.4) 服务器,在共享主机的基础上,没有 root 访问权限。而且,如前所述,在 Ratchet 中编程的聊天应用程序和网站的 HTML 页面都存在于 Web 服务器上。

在我的本地主机上进行测试时,效果非常好。然而,当尝试在我的 Web 服务器上部署它时,我遇到了麻烦,并且似乎需要在我的 Web 服务器或类似服务器( http://socketo.me/docs/deploy)前面使用 NGINX 反向代理。考虑到我的托管条件,这甚至可以部署,还是我需要切换到另一种托管类型?我从配置 NGINX 开始,但问题是我实际上无法修改我的 Apache Web 服务器正在侦听的端口,因为我没有 root 访问权限。我觉得我需要为此切换我的托管类型?

这个问题的一个方面可以总结为:当在共享主机的基础上拥有一个没有 root 访问权限的 web 服务器时,是否可以在客户端和浏览器之间放置一个反向代理以用于 websocket 目的?

php nginx reverse-proxy websocket shared-hosting
  • 1 个回答
  • 202 Views
Martin Hope
Dominique
Asked: 2020-05-03 00:32:47 +0800 CST

如何解决 Nginx WebSocket 安全(wss)“需要升级错误 426”?

  • 0

我试图在我的 Nginx 服务器上配置一个 Websocket 代理,但不幸的是,我没有让它工作。我在这里阅读了各种帖子,但我无法让服务器正常工作。我认为这与客户端与服务器的连接有关。本地 om 我的电脑一切正常

客户端代码:

 var port = new osc.WebSocketPort({
          url: "wss://circusfamilyprojects.nl/"
        });

服务器代码:

var wss = new WebSocket.Server({
    port: 8083
});

这是我在 Ngnix 上的配置:

# custom code for hop by hop headers
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }


    #custom code for connection with websocket this is the port on the server
     upstream websocket  {
        server 178.62.209.37:8083;
    }

server {

      listen [::]:443 ssl ipv6only=on; # managed by Certbot
      listen 443 ssl; # managed by Certbot
      ssl_certificate /etc/letsencrypt/live/circusfamilyprojects.nl/fullchain.pem; # managed by Cert$
      ssl_certificate_key /etc/letsencrypt/live/circusfamilyprojects.nl/privkey.pem; # managed by Ce$
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

       root /var/www/html/vue/cfdomotica/server/public;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

       server_name  circusfamilyprojects.nl www.circusfmailyprojects.nl; # managed by Certbot

      location / {
            proxy_pass http://websocket;
            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-Forwarded-Proto $scheme;
            proxy_pass_request_headers on;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;

        }
}

server {
    if ($host = www.circusfamilyprojects.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = circusfamilyprojects.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 8080 ;
        listen [::]:8080 ;
    server_name  circusfamilyprojects.nl;
    return 404; # managed by Certbot
}

在我的浏览器中,我收到消息“状态代码:需要 426 升级”希望有人能帮助我,在此先感谢!

ssl nginx certbot websocket
  • 1 个回答
  • 1997 Views
Martin Hope
Constantin
Asked: 2020-04-30 06:50:22 +0800 CST

NGINX Proxy_Pass 到 Plesk 服务器上的 websocket 服务器

  • 0

我正在尝试通过 ssl 连接将 websocket 客户端连接到我的服务器。我想通过 www.myurl.com/socket/ 访问它(子域也是一个选项),并且 websocket 服务器在端口 7777 上运行。由于服务器正在运行 Plesk,我需要在 Plesk 界面中进行配置。

我刚刚尝试的是将我的配置放在这里: Apache & nginx Settings for myurl | Additional nginx directives

我的配置如下:

location /socket/ {
    proxy_pass "http://127.0.0.1:7777";
    proxy_read_timeout     60;
    proxy_connect_timeout  60;
    proxy_redirect         off;
    # Allow the use of websockets
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;

}

我没有建立任何连接。它在非安全连接上没有 des proxy_pass 的情况下工作。

我是否将配置错误或任何其他暗示问题可能是什么?如果有有用的方法或工具来分析错误在哪里,它也会对我有所帮助。

ubuntu nginx laravel websocket plesk
  • 1 个回答
  • 2145 Views
Martin Hope
Brian Beckett
Asked: 2017-03-09 12:15:17 +0800 CST

Apache 2.4.7 mod_proxy_wstunnel 隧道太多(HTTP 和 WS)

  • 3

我在 Ubuntu 14.04 LTS 上运行 Apache 2.4.7 作为反向代理。此 Apache 服务器充当许多不同后端应用程序的入口点,这些应用程序通过<Location>块中的不同 mod_proxy 配置访问

我需要为使用 WebSockets 的应用程序提供反向代理访问。该应用程序是一个 Java Spring 应用程序,它通过 HTTP 提供 HTML 和其他静态文件,然后在页面加载后使用 WebSocket 获取动态数据。

我Nginx使用以下配置让应用程序在后面运行:

location /newapp/ {
    proxy_pass http://newapp.example.com:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

不幸的是,由于需要 Nginx 上不可用的 Apache 身份验证模块,我无法在生产中使用它。

在伪 Apache-config 中,我想做的是:

<Location /newapp/>
    if not WebSockets:
        ProxyPass http://newapp.example.com:8080/
        ProxyPassReverse /
    else
        ProxyPass ws://newapp.example.com:8080/
        ProxyPassReverse /
</Location>

Apachemod_proxy_wstunnel模块让我认为这应该是可能的。WebSocket 是在 URL 上访问的/api/socket/...,所以我尝试ProxyPass使用单独的<Location>块分隔两种类型:

<Location /newapp/>
    ProxyPass http://newapp.example.com:8080/ disablereuse=on
    ProxyPassReverse /

    ProxyPassReverseCookieDomain newapp.example.com apps.example.com
    ProxyPassReverseCookiePath http://newapp.example.com:8080/ /newapp/
</Location>

<Location /newapp/api/socket/>
    ProxyPass ws://newapp.example.com:8080/api/socket/
    ProxyPassReverse /
</Location>

这最初是有效的——浏览器请求http://apps.example.com/newapp/,页面通过 HTTP 加载,静态资产被加载,JavaScript 代码连接到 websocket,一切都很棒。

但是,当通过 HTTP 发出新请求时,例如 for GET /newapp/static/someimage.png,就会出现问题。此请求与 WebSocket 位置不匹配,因此我希望它能够代理GET /static/someimage.png到http://newapp.example.com:8080/.

相反,应用程序服务器收到请求GET /newapp/static/someimage.png并返回 404,因为这不是它知道的 URL。这会破坏应用程序,因为应该工作的 HTTP 请求会失败。

笔记:

  • 这不仅发生在图像上 -GET /newapp/api/ajax/someapicall也被错误地代理。
  • 这并不总是发生。在测试完成这个问题的过程中,我设法让应用程序完全运行。这可能是基于时间的——在发出任何新的 HTTP 请求之前,我让应用程序运行了几分钟而没有与之交互。当我确实发出新的 HTTP 请求时,它们正确地通过了。
  • 禁用该<Location /newapp/api/socket/>部分会导致两件事发生 - WebSocket 无法连接,并且 HTTP 请求继续工作。
  • 通过浏览器的刷新按钮刷新页面后,我发现了这个问题。我没有再次加载页面,而是看到了应用程序的 404 屏幕。

我认为正在发生的事情:

我认为mod_proxy_wstunnel,一旦被第一个匹配请求激活/newapp/api/socket/,就会接管来自客户端的所有进一步的入站请求,无论它们是否匹配Location。RequestHeader set Test "some_identifying_value"我通过向每个指令添加一个指令来测试这一点Location- 静态文件的 HTTP 请求和 for在它们上/api/socket/info有Test标头,但错误代理的 HTTP 请求上没有Test 标头,这表明它们被直接传递而没有由 Apache 指令处理。

最终,我的问题是:是否可以将任何版本的 Apache(我很高兴升级!)配置为反向代理基于 WebSocket 的应用程序,从而在 WebSocket 之后也正确地反向代理 HTTP 请求连接的?如果是这样,这是如何配置的?

reverse-proxy mod-proxy apache-2.4 websocket
  • 2 个回答
  • 12838 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve