сокет прокси io не может соединиться с nginx, узел на докере - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь подключить экземпляр socket.io в моем приложении Docker, используя nginx, node и реагировать.Запросы сокетов остаются в ожидании, а затем через некоторое время не выполняются.Я пробовал другой конфиг, чтобы сделать запрос сокета проксированным nginx для сервера узла, но безуспешно.Раньше он работал вне докера, но теперь все застревает из-за сбоя моего сокета.

Вот мой фактический конфиг nginx:

upstream frontend {
    least_conn;
    server client:8080;
}

upstream backend {
    least_conn;
    server server:8080;
}

server {
    listen 80;

    server_name localhost;

    location / {
        proxy_pass http://frontend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /api {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    location /ws/ {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Здесь мой докер создает файл

version: '3'
   services:

     nginx:
       build:
         context: ../..
         dockerfile: ./dev-kit/docker/nginx/Dockerfile
       ports:
         - 8080:80
       links:
         - client
         - server

  client:
    build: ../../client
    ports:
      - 8088:8080
    volumes:
      - ../../client:/app:cached
    command: npm run start

  server:
    build: ../../server
    ports:
      - "8082:8080"
    volumes:
      - ../../server:/app:cached
    depends_on:
      - "mongo"

  mongo:
    image: "mongo"
    volumes:
      - /usr/local/var/mongodb/:/data/db
    ports:
      - "27017:27017"

Вот серверная часть на экспрессе:

const express           = require('express');
const app               = module.exports = express();
const http              = require('http').Server(app);

const bodyParser        = require('body-parser');
const io                = require('socket.io')(http);

const session           = require('express-session');
const MongoStore        = require('connect-mongo')(session);

const appInterface = process.env.HOST || '0.0.0.0';
const port = process.env.PORT || 8080;

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested- With, Content-Type, Accept, x-access-token');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE');
    next();
});

io.on('connection', (socket) => {
  console.log('one user connected !');
  socket.on('register', (userId) => {
    users[userId] = socket.id;
  });
});

// Start server
http.listen(port, appInterface.toString(), function (err) { 
   console.log('[%s] Listening on http://localhost:%d', 
   app.settings.env, port); 
});

К сожалению, это никогда не выполняется, потому что запрос сокета io не выполняется.

И, наконец, вот мой app.js на стороне клиентагде я создаю экземпляр экземпляра сокета io:

const socket = io('http://server:8080', { path: '/ws/socket.io' });
socket.emit('register', XXXX);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...