Ошибка подключения Nginx/gunicorn WebSocket: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 404/400
Поэтому я использую Centos 7, Django 2.1.3, Python 3.6, Nginx, Gunicorn, uvicorn, Channels для проекта чата.
Я развернул проект на сервере Centos: я запускаю проект с помощью службы Gunicorn.
теперь, когда я тестирую соединение WebSocket, используя server_ip, как этоws://xx.xxx.x.xx:82/ws/chat/
: он работает отлично, но когда я использую доменное имя для этого ip, как это wss://myDomaineName/ws/chat/
: Я получаю эту ошибку (failed: Error during WebSocket handshake: Unexpected response code: 404
)
причина, по которой я использую wss вместо ws при использовании myDomaineName, потому что у меня есть WAF с SSL, который я использую для перенаправления на сервер проекта.
это мой файл конфигурации nginx в /etc/nginx/conf.d:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream uvicorn {
server unix:/srv/www/myProject/run/gunicorn.sock fail_timeout=10s;
}
server {
listen 82;
access_log /srv/www/myProject/logs/nginx-access.log;
error_log /srv/www/myProject/logs/nginx-error.log warn;
root /srv/www/myProject/back-end;
location /ws/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://uvicorn;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_buffering off;
}
}
Я почти уверен, что проблема в Nginx conf, потому что когда я тестирую, я получаю это в nginx-access.log:
xx.xxx.x.xx - - [18/Sep/2019:11:37:05 +0100] "GET /ws/chat/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36"
и я ничего не получаю в nginx-error.log.
Я прочитал много таких проблем, как это соединение Nginx/Apache2 WebSocket с ошибкой: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 404 или https://github.com/socketio/socket.io/issues/1942, и я много раз менял конфигурацию, но я получаю ту же ошибку или ту же ошибку сUnexpected response code: 400
. Есть идеи, как решить проблему?