Docker nginx websocket代理==客户端在等待请求时关闭了连接

编程入门 行业动态 更新时间:2024-10-19 10:16:57
本文介绍了Docker nginx websocket代理==客户端在等待请求时关闭了连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我拼命尝试将Nginx代理设置为websocket.Websocket连接,但随后我得到

I desperately trying to setup nginx proxy to websocket. Websocket connects but then I'm getting

2018/02/10 19:30:34 [info] 7#7:* 238客户端关闭连接而等待请求,客户端:172.18.0.1,服务器:0.0.0.0:8888

2018/02/10 19:30:34 [info] 7#7: *238 client closed connection while waiting for request, client: 172.18.0.1, server: 0.0.0.0:8888

这是最小的示例:

nginx.conf

worker_processes 1; events { worker_connections 1024; } error_log /dev/stdout debug; http { resolver 127.0.0.11 ipv6=off; include mime.types; access_log /dev/stdout; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tornado { server ws:8888; #server ws:8889; I may add another upstream here } server { add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; listen 8888; server_name pychat; charset utf-8; client_max_body_size 75M; location / { proxy_pass tornado/; #>>> otherwise error 400 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_send_timeout 330; proxy_read_timeout 330; #>>>>>> #proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Scheme $scheme; } } }

server.py

import tornado.ioloop from tornado.websocket import WebSocketHandler, WebSocketClosedError from tornado import web class MainHandler(WebSocketHandler): def open(self): print("WebSocket opened") def on_message(self, message): print("ws mess" + message) self.write_message(u"You said: " + message) def on_close(self): print("WebSocket closed") def check_origin(self, origin): return True def make_app(): return tornado.web.Application([ (r'.*', MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()

docker-compose.yml

version: '2.3' services: nginx: build: context: ../ dockerfile: ./dockerfilenginx ports: - 8888:8888 ws: build: context: ../ dockerfile: ./docker/Dockerfilews

Dockerfilenginx :

FROM alpine:3.6 RUN apk update &&\ apk add vim nginx ca-certificates wget && update-ca-certificates COPY ./docker/nginx-test.conf /etc/nginx/nginx.conf CMD ["nginx", "-g", "pid /tmp/nginx.pid; daemon off;"]

Dockerfilews

FROM alpine:3.6 RUN apk update &&\ apk add python3 &&\ pip3 install tornado WORKDIR /usr/src COPY ./server.py /usr/src CMD python3 server.py

然后只需尝试打开服务器的WebSocket,例如通过浏览器控制台(shift + ctrl + i).

Then just try to open a WebSocket to the server, e.g. from browser console (shift+ctrl+i).

ws = new WebSocket('ws://localhost:8888') ws.send("wsdata")

如果我删除nginx代理并仅在docker上公开websocket端口-一切正常.

If I remove nginx proxy and just expose websocket port on docker - everything will work.

推荐答案

您可以为nginx尝试使用此代理配置吗,我将其用于django和daphne

can you try this proxy config for nginx, i use it for django and daphne

proxy_http_version 1.1; 解决了该问题.

location / { proxy_pass ws:8888; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; 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-Host $server_name; }

更多推荐

Docker nginx websocket代理==客户端在等待请求时关闭了连接

本文发布于:2023-11-25 23:47:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631825.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:在等待   客户端   关闭了   Docker   nginx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!