Назад | Перейти на главную страницу

Nginx неправильно проксирует веб-сокеты

Использование разрабатываемой версии nginx (1.3.12). В моем соответствующем файле под сайтами с поддержкой:

upstream twisted {
    server 127.0.0.1:8088;
}

server {  

    listen   80; ## listen for ipv4  

    server_name  *.clurn.co.uk clurn.co.uk;  

    access_log  /var/log/nginx/clurn.co.uk.access.log;  

    location / {  
            root   /var/www/clurn.co.uk;  
            index  index.html index.htm;  

    }  

    location /websocket {  
            proxy_pass http://twisted;  
            proxy_http_version 1.1;  
            proxy_set_header Upgrade $http_upgrade;  
            proxy_set_header Connection "Upgrade";  
    }  

    location /websocket/server {  
            deny all;  
    }  

    [...snip...]
}

Единственное отличие от пример на сайте nginx заглавная буква u при обновлении, которое казалось необходимым для автобана и / или txWS экземпляры для правильного распознавания веб-сокетов (я не могу вспомнить, какой из них был банкомат).

Теперь, если я получу доступ к веб-узлам через 127.0.0.1:8088 на сервере, похоже, он работает, но если я получу к нему доступ через 127.0.0.1/websockets это не так, поэтому должно быть что-то не так с маршалингом пакетов через nginx.

Если я сбегу netcat -l -p 8088 вместо бэкэнда Twisted websocket, я вижу, что запросы идентичны при доступе через nginx или напрямую (изначально это не так, но изменение «обновления» на «Upgrade» сделало строку заголовка Connection: Upgrade то же самое), поэтому эта часть проксируется правильно.

Однако, если я подключусь к 127.0.0.1:8088 и 127.0.0.1/websocketкопируя и вставляя правильный запрос, я получаю ответ с прямым 127.0.0.1:8088, а не с 127.0.0.1/websocket. Что я делаю не так и как я могу настроить его, чтобы разрешить использование веб-сокетов с обеих сторон?

Думаю, проблема в буферизации. Устанавливать:

proxy_buffering off;

внутри конфигурации расположения веб-сокета.