Nano Hash - криптовалюты, майнинг, программирование

Как передать proxy_pass с nGINX на сервер WebSocket (Tornado)

Я разрабатываю веб-сервисы Django. Я пытаюсь использовать PUSH с помощью WebSocket (ws://). До сих пор в nGINX нет поддержки ws. Поэтому я использую Tornado Server для размещения WebSocket. Многие (почти все) учебники имеют решение с использованием Socket.io. Я не хочу использовать Socket.io, потому что это не чистый WebSocket (как по мне). Я просто хочу использовать ws, а не Socket.io (Node.js).

Что ж, мой интерфейсный сервер должен быть nGINX для обслуживания HTTP-запросов. ws:// Запросы должны передаваться на сервер Tornado (или любой другой сервер, если он поддерживается)


Ответы:


1

Вот фрагмент конфигурации NGINX

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream websocket {
    server 192.168.100.10:8010;
}

server {
    listen 8020;
    location / {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

Более подробную информацию можно найти в их блоге https://www.nginx.com/blog/websocket-nginx/

15.12.2015

2

На момент написания Nginx не поддерживал веб-сокеты — теперь поддерживается в версии 1.3.13 (февраль 2013 г.)

Проблема в том, что nginx не поддерживает веб-сокеты, так как он терминирует и проксирует данные нижестоящему сервису. Вам нужно будет поставить HAProxy перед вашим сервером nginx, чтобы маршрутизировать трафик так, как вы хотите.

Хороший пример здесь - HAProxy + WebSocket Disconnection - хотя они говорят о nodejs как о серверной службе, все по сути одинаково.

28.09.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..