Как настроить uwsgi + nginx + Django + websocket? - PullRequest
0 голосов
/ 23 сентября 2019

Я успешно развернул uwsgi + nginx + Django.Но я хочу общаться с моим сервером, используя websocket.

Я следовал этому руководству для обработки обычных запросов https.https://uwsgi -docs.readthedocs.io / en / latest / tutorials / Django_and_nginx.html

Настройки файла конфигурации nginx выглядят следующим образом:

upstream django {
    server unix:///path/to/your/mysite/mysite.sock; # for a file socket
}

# configuration of the server
server {
    # the port your site will be served on
    listen 443 ssl; # managed by Certbot
    # the domain name it will serve for
    server_name example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;



    location /static {
        alias /path/to/your/mysite/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed
    }
}

IГуглил много и обнаружил, что люди рекомендовали добавить эти настройки:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;

Не работает.Я не использовал proxy_pass, потому что я уже использую uwsgi_pass django;, и мой клиент пытается подключиться через веб-сокет к тому же URL-адресу (местоположение), которое я uwsgi_pass к django.Я просмотрел документацию uwsgi и нашел эту страницу: https://uwsgi -docs.readthedocs.io / en / latest / WebSockets.html

По этой странице мне не нужны дополнительные настройкиесли я просто добавлю опцию --http-websockets.Так я и сделал.Например:

/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --http-websockets www-data --daemonize /var/log/uwsgi-emperor.log

Добавляется в /etc/rc.local.Эта команда тоже не работает.Я также попытался добавить http-websockets = true в файл .ini.Это даже заставило uwsgi остановиться.Поэтому я удалил эту опцию.

Что здесь не так?

Я получаю 400 Bad Request за каждый запрос веб-сокета.Единственные данные, которые я вижу, это (код операции -1).Сообщение об ошибке в graphql отсутствует.

...