gpt4 book ai didi

django - Nginx 在 proxy_pass 之后使用 Upgrade header

转载 作者:行者123 更新时间:2023-12-04 12:53:48 24 4
gpt4 key购买 nike

所以我在两天的大部分时间里一直在用头撞墙,请帮忙。

我正在尝试使用此建立 Websocket 连接
django-websocket-redis配置。
有 2 个 uwsgi 实例正在运行,一个用于网站,一个用于 websocket 通信。

我大量使用wireshark来找出到底发生了什么,显然nginx正在吃标题“连接:升级”和“升级:websocket”。

这是关键的 nginx 配置部分:

upstream websocket {
server 127.0.0.1:9868;
}

location /ws/ {
proxy_pass_request_headers on;
access_log off;
proxy_http_version 1.1;
proxy_pass http://websocket;
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade websocket;
}

正如您在 2 screenshots 上看到的那样,内部通信的 tcpdump 显示握手效果很好。但在我的浏览器(第二张图片)中,标题丢失了。

任何想法都非常感谢。我真的被困在这里:(

版本:
nginx - 1.7.4
uwsgi - 2.0.7

点卡住:
Django ==1.7
MySQL-python==1.2.5
django-redis-sessions==0.4.0
django-websocket-redis==0.4.2
gevent==1.0.1
小绿==0.4.4
redis==2.10.3
六==1.8.0
uWSGI==2.0.7
wsgiref==0.1.2

最佳答案

我会使用 gunicorn 来部署 django 应用程序,但无论如何。

我记得我在 gunicorn 文档上看到了这个:

If you want to be able to handle streaming request/responses or other fancy features like Comet, Long polling, or Web sockets, you need to turn off the proxy buffering. When you do this you must run with one of the async worker classes.

To turn off buffering, you only need to add proxy_buffering off; to your location block:



在您的位置将是:
location /ws/ {
proxy_pass_request_headers on;
access_log off;
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://websocket;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade websocket;
}

链接到 gunicorn 用于在 nginx 中部署的指南。
http://docs.gunicorn.org/en/latest/deploy.html?highlight=header

希望这可以帮助

关于django - Nginx 在 proxy_pass 之后使用 Upgrade header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26183824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com