【发布时间】: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