Использование разрабатываемой версии 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;
внутри конфигурации расположения веб-сокета.