Tag: websocket

我如何检测一个TCP连接是否已经从一个SSL连接转发?

我正在处理的特定场景是尝试连接到AWS弹性负载均衡器后面的websocket连接,同时实施https / ssl而不是http / tcp。 要从http / s启用TCP / SSL升级,负载平衡器上的协议必须已设置为TCP,而不是端口80和HTTP上的HTTP,而不是443上的HTTPS,两者都转发到80端口上TCP。 但是,将协议设置为TCP / SSL的一个副作用是x-forwarded-proto头文件不再被设置,如下所示: Amazon Elastic负载均衡器不会填充x-forward-proto头 这使得使用http / tcp到https / ssl 301来传入请求的下一个挑战有点问题,因为这通常依赖于检查x-forwarded-proto头。 关于具体情况的更多细节:存在一个Docker容器,其中运行的Meteor.js进程依次驻留在AWS Elastic Beanstalk应用程序中(默认情况下具有Nginx代理层,但这不是由于使用docker工具,只需从docker集线器中取出一个集装箱定义就可以访问),位于上述ELB之后。 最终,我会在请求通过ELB,Nginx和Docker代理层时检查我的应用程序可用的头文件,试图解决客户端提出的原始请求是以http还是https 传入https://请求标题: { host: 'whatever.elasticbeanstalk.com', 'x-real-ip': '999.99.99.99', 'x-forwarded-for': '999.99.99.99', 'cache-control': 'max-age=0', accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', 'accept-encoding': 'gzip, […]

通过websocket附加docker容器的标准input

我正在使用chrome websocket客户端扩展来连接到正在运行的容器,调用Docker远程API,如下所示: ws://localhost:2375/containers/34968f0c952b/attach/ws?stream=1&stdout=1 该容器是从我的机器本地启动,在图像中执行一个jar,等待用户input。 基本上我想从Web浏览器的input字段提供这个input。 尽pipe我能够使用API​​端点进行连接,但是我遇到了一些问题 – 可能是由于我对ws端点以及糟糕文档的晦涩理解 – 我想要解决的问题: 1)使用chrome websocket客户端扩展发送数据时,框架似乎根据networking检查工具通过websocket发送。 然而,在等待input的容器中运行的进程只有在websocket连接closures时才会收到发送的数据。 这是标准的行为? 直观上你会希望input被立即发送到进程。 2)如果我同时附加到stdin和stdout,docker deamon卡住等待stdin附加,导致无法看到任何输出: [debug] attach.go:22 attach: stdin: begin [debug] attach.go:59 attach: stdout: begin [debug] attach.go:143 attach: waiting for job 1/2 [debug] server.go:2312 Closing buffered stdin pipe [error] server.go:844 Error attaching websocket: use of closed network connection 我已经解决了这个开放两个单独的连接为标准input和标准输出,这工作,但真的很烦人。 任何想法在这一个? 提前致谢!

公开ManagedVM中的多个端口

我正在使用Managed VMfunction来运行一个WebSocket服务器,我想通过以下URL访问任何端口(最好是端口80)的Internet:mvm.mydomain.com 我还没有太多的成功。 以下是我用来完成这个任务的各种文件的相关部分: Dockerfile: EXPOSE 8080 8081 在Dockerfile的最后,启动了一个Python应用程序:它响应8080端口的运行状况检查(我可以validation这个工作),并响应端口8081上的WebSocket请求。 app.yaml中: module: mvm version: 1 runtime: custom vm: true api_version: 1 network: forwarded_ports: ["8081"] 我将这个应用程序部署到云使用: $ gcloud preview app deploy . 在云端控制台中,我确定TCP端口8080和8081可以接收传入stream量。 我也观察到分配给GCE实例(mvm:1)的IP地址是:xyzz $ curl http://xyzz:8080/_ah/health $ curl http://mvm.my-app-id.appspot.com/_ah/health 用200 OK回应。 使用一些JavaScript连接WebSocket服务器也是如此: new WebSocket('ws://xyzz:8081'); 到现在为止还挺好。 除此之外没有工作(超时): new WebSocket('ws://mvm.my-app-id.appspot.com:8081'); 我想知道为什么上面的WebSocket命令不起作用。 也许是我在GAE / GCE端口转发交互中不理解的东西? 如果这可以以某种方式工作,我想以下将是完成它的最后一个步骤。 dispatch.yaml: dispatch: # […]

从docker到websocket的彩色输出

这可能有点复杂的问题,但我可以尝试任何和所有的build议。 我正在运行一个克隆git仓库的docker实例,它是一个php 7的apache docker实例: FROM php:7.0-apache 用Symfony进程组件启动我的容器并传递我的环境variables。 "docker run -e REPOSITORY=\"{$url}\" -e COMPOSER_ALLOW_SUPERUSER=1 -e TERM='xterm-256color' arbiter bash -l" 我已经添加了xterm-256-color环境,以确保我得到彩色输出(纠正我,如果这是错误的)。 要显示容器的输出,我使用Symfony Process Component将其发送到websocket。 $process->run(function ($type, $buffer) use ($socket) { socket_write($socket, $buffer, strlen($buffer)); }); 在这一点上,我可以使用像socket.io这样的东西,实时显示在网页上。 问题是,我想显示docker输出正确的颜色,你通常会看到它与terminal。 尽pipe如此,所有的格式化和着色似乎都失去了。 有没有任何网站,我可以通过docker输出到WebSocket,仍然保持我的着色显示在网页上? 任何提示或提示引导我在正确的方向是受欢迎的,因为我在这里问很多。 感谢读书,欢呼。 编辑 为了清楚,我还没有得到任何彩色的输出,从docker容器给我的输出看起来就像这样(composer php的例子): [2017-02-12 01:02:56] local.INFO: remote: Counting objects: 69, done. remote: Compressing objects: 2% (1/47) remote: […]