【问题标题】:Not getting response from socket.io configured with nginx没有从使用 nginx 配置的 socket.io 获得响应
【发布时间】:2016-06-02 17:35:55
【问题描述】:

创建了一个 node.js 应用并配置了 nginx 反向代理。该应用程序运行良好,直到我使用 nginx 配置它。但是在 nginx 应用程序能够连接到服务器但连接没有恢复到客户端。但是服务器在连接时正在打印日志。代码 sn-ps 如下。而且我忘了提到我将 socket-io 与 ember.js 一起使用

nodejs/server.js

var express = require('express')
  , app = express()
  , http = require('http')
  , server = http.createServer(app)  
  , io = require('socket.io').listen(server);

server.listen(3000);


io.sockets.on('connect', function (socket) {
  console.log('------------->> Client Conected !!'); 


  socket.on('message', function (msg) {   
        onMessage(msg); 
   });

  function onMessage(msg) {      
      console.log('------------->> client msg - '+msg);       
   }

  socket.on('disconnect', function () {      
      console.log("------------->> Client disconected !!");
    });  
 });
console.log("server started @ 3000");

emberjs/socketio-client-controller.js

import Ember from 'ember';

export default Ember.Controller.extend({
  socketIOService: Ember.inject.service('socket-io'),
  init: function() {
    this._super.apply(this, arguments);
    var socket = this.get('socketIOService').socketFor('http://nginx.domain.com/socketio/server');
  socket.on('connect', function() {
      console.log("connected");
      socket.send('Hi Server');
      socket.on('message', this.onMessage, this);
    }, this);
  },

  onMessage: function(data) {
      console.log(data);
  }
});

在 nginx 出现之前,这一切正常。但仍然设法配置如下

nginx.conf

http {

    upstream node {
        server ip-node-app:3000;
    }   

 server {
        listen       80;
        server_name  nginx.domain.com;

            location / {
            root   html;
            index  index.html index.htm;
        }

           location /socketio/server {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-NginX-Proxy true;           
             proxy_buffers 8 32k;
             proxy_buffer_size 64k;
             proxy_pass http://node;
             proxy_redirect off;          
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";      
        }

        location /socket.io {
           proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-NginX-Proxy true;           
             proxy_buffers 8 32k;
             proxy_buffer_size 64k;
             proxy_pass http://node;
             proxy_redirect off;          
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";      
        }       
        }
    }

一旦客户端触发对服务器的请求,我就会看到 console.log 打印

"------------->> 客户端连接!!"

但是客户端根本没有从服务器得到任何响应(这意味着客户端不会连接到服务器但服务器接收到客户端连接的请求)。我在这里错过了什么?

【问题讨论】:

    标签: node.js nginx ember.js socket.io


    【解决方案1】:
    server {
        server_name app.domain.com;
        location / {
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_pass http://socket_node;
        }
    }
    

    这个配置应该可以工作。

    来源:https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 2012-03-11
      • 2012-03-25
      • 1970-01-01
      • 2016-07-08
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多