Обратный прокси Socket.io с Nginx & docker - не работает - PullRequest
0 голосов
/ 01 апреля 2020

Вкратце, но у меня проблемы с регистрацией соединения между моим клиентским приложением и сервером socket.io.

Я пытался проверить это на локальном хосте, но я не получаю сообщение о соединении. Единственный способ установить соединение - это запустить приложение express (без обратного прокси-сервера * 1022) и запустить мой тестовый файл с io('https://localhost:3000/socket.io')

I '. Я использую docker compose, чтобы собрать все и красиво упаковать, но я не включил его в пост-длины.

nginx .conf

worker_processes 1;

events {
  worker_connections 1024;
}

http {
  include mime.types;
  default_type application/octet-stream;

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

    root /usr/share/nginx/html;

    location / {
      try_files $uri $uri/ /index.html;
    }

    location /api {
      proxy_pass                  http://api:3000;
      proxy_http_version          1.1;

      proxy_cache_bypass          $http_upgrade;

      proxy_set_header Connection "upgrade";
      proxy_set_header Host       $host;
      proxy_set_header Upgrade    $http_upgrade;
    }

    location /socket.io {
      proxy_pass                  http://api:3000;
      proxy_http_version          1.1;

      proxy_cache_bypass          $http_upgrade;

      proxy_set_header Connection "upgrade";
      proxy_set_header Host       $host;
      proxy_set_header Upgrade    $http_upgrade;
    }
  }
}

server index.ts

import cookieParser from 'cookie-parser';
import cors from 'cors';
import express from 'express';
import http from 'http';
import helmet from 'helmet';
import logger from 'morgan';
import socketIO from 'socket.io';

import apiRouter from './routes/api';

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

app.set('trust proxy', 1);

app.use(helmet());
app.use(cors());

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use('/api', apiRouter);

app.use((req, res) => res.status(404).json({
  status: 404,
  message: 'Not found',
}));

io.on('connection', (socket) => {
  console.log('User connected');

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

const PORT = Number(process.env.PORT) || 3000;
server.listen(PORT, () => console.log(`Server running on port: ${PORT}`));

test index.ts

import io from 'socket.io-client';

const socket = io(/* Confused Here? */)

В моем файле тестирования Я пытался сделать io(), io('http://localhost), io(http://localhost/socket.io), но, похоже, ничего не работает. Любая помощь будет оценена

...