带Nginx和docker-compose的Socket.io反向代理不起作用

时间:2020-04-01 02:06:13

标签: node.js nginx socket.io reverse-proxy

为了简短起见,但是我无法注册从前端应用程序到我的socket.io服务器的连接。

我一直在尝试在localhost上进行测试,但没有收到连接消息。我能够连接它的唯一方法是单独运行express应用程序(不使用nginx反向代理),并使用io('https://localhost:3000/socket.io')

运行测试文件

我正在使用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;
    }
  }
}

服务器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}`));

测试index.ts

import io from 'socket.io-client';

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

在测试文件中,我尝试执行io()io('http://localhost)io(http://localhost/socket.io),但似乎没有任何效果。任何帮助将不胜感激

0 个答案:

没有答案
相关问题