Конфигурация обратного прокси nginx websocket

Привет я пытаюсь настроить nginx в качестве обратного прокси для веб-сокетов. Я настраиваю свой сервер следующим образом:

server {
    listen       80;
    server_name  www.mydomain.com;

    access_log  off;
    #error_log off;

    location / {
        proxy_pass         http://127.0.0.1:8765;
        proxy_redirect     off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;

        proxy_buffering off;
    }

}

но я получаю ошибку от клиента, как следующий

Сбой подключения WebSocket к ws://www.application.com/ws: ошибка при рукопожатии WebSocket: значение заголовка "Connection" не равно "Upgrade"

Я, вероятно, делаю некоторые настройки неправильно, но я не мог видеть это.

Следующие заголовки запроса для клиента следующие

GET ws://www.talkybee.com/ws HTTP/1.1
Pragma: no-cache
Origin: http://www.talkybee.com
Host: www.talkybee.com
Sec-WebSocket-Key: Ol+O1IdaLEsHxxWRBt2oqg==
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Upgrade: websocket
Sec-WebSocket-Extensions: x-webkit-deflate-frame
Cache-Control: no-cache
Connection: Upgrade
Sec-WebSocket-Version: 13

Когда я делаю нормальное прямое соединение, у меня просто работает соединение. Вот заголовок рабочего запроса.

Cache-Control:no-cache
Connection:Upgrade
Host:www.talkybee.com:8765
Origin:http://www.talkybee.com:8765
Pragma:no-cache
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:Y026b/84aUkMxVb0MaKE2A==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36

1 ответ

Эта проблема связана с версией nginx. Пожалуйста, проверьте nginx -v, чтобы проверить вашу версию. Следующие параметры поддерживаются после версии 1.4.

 # WebSocket support (nginx 1.4)
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";

Если вы используете Ubuntu, вы можете установить более новую версию с помощью следующих шагов:

Сначала удалите старую версию ( https://askubuntu.com/questions/235347/what-is-the-best-way-to-uninstall-nginx):

sudo apt-get remove nginx
sudo apt-get purge nginx
sudo apt-get autoremove 

Затем установите новую версию ( https://launchpad.net/~nginx/+archive/development):

sudo add-apt-repository ppa:nginx/development
sudo apt-get update
sudo apt-get install nginx
Другие вопросы по тегам