Javascript 如何配置node.js使其在实际web服务器上正常工作

Javascript 如何配置node.js使其在实际web服务器上正常工作,javascript,node.js,sockets,web,socket.io,Javascript,Node.js,Sockets,Web,Socket.io,我有一个简单的node.js/socket.io聊天程序,它几乎完全基于。当我使用localhost:3000连接到本地机器时,它在本地机器上工作正常。然后我尝试将它放到我的Web服务器上,这样任何人都可以访问mydomain.com/experiments/thing.html,并访问相同的程序。我一辈子都不能让它正常工作。HTML加载得很好,但是在控制台中我看到了很多与socket.io相关的404错误。我花了很长时间试图寻找解决方案,但除了localhost之外,我找不到任何教程提到如何设

我有一个简单的node.js/socket.io聊天程序,它几乎完全基于。当我使用
localhost:3000
连接到本地机器时,它在本地机器上工作正常。然后我尝试将它放到我的Web服务器上,这样任何人都可以访问
mydomain.com/experiments/thing.html
,并访问相同的程序。我一辈子都不能让它正常工作。HTML加载得很好,但是在控制台中我看到了很多与socket.io相关的404错误。我花了很长时间试图寻找解决方案,但除了
localhost
之外,我找不到任何教程提到如何设置类似的内容

因此,我想要帮助的是设置此代码,这样,如果用户转到
mydomain.com/experiments/whatever.html
,此代码将像我在当前状态下导航到
localhost:3000
一样工作

这是我的密码:

服务器:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

http.listen(3000, function(){
  console.log('listening on *:3000');
});

app.get('/', function(req, res){
  res.sendFile('other.html', { root : __dirname});
});

io.on('connection', function(socket){
  console.log("new connection, user " + socket.id);
  socket.on('disconnect', function(){
    console.log("user " + socket.id + " disconnected.");
  });
});
客户:

<!doctype html>
<html>
  <head>
    <title>Thing</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="commandLine" autocomplete="off" /><button>Send</button>
    </form>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('command', $('#commandLine').val());
        $('#commandLine').val('');
        return false;
      });
    </script>
  </body>
</html>

事情
*{边距:0;填充:0;框大小:边框框;}
正文{字体:13px Helvetica,Arial;}
表单{background:#000;填充:3px;位置:固定;底部:0;宽度:100%;}
表单输入{边框:0;填充:10px;宽度:90%;右边距:5%;}
窗体按钮{宽度:9%;背景:rgb(130224255);边框:无;填充:10px;}
#消息{列表样式类型:无;边距:0;填充:0;}
#消息li{padding:5px 10px;}
#留言李:第n个孩子(奇数){背景:#eee;}
    发送 var socket=io(); $('form')。提交(函数(){ emit('command',$('#commandLine').val(); $('#命令行').val(''); 返回false; });

    非常感谢您的帮助,我感到很失落,因为我真的不知道我在这里做什么。一般来说,我对node.js非常陌生。

    首先,我只想确保您知道必须能够在服务器上运行nodejs。也就是说,您必须在服务器上安装节点并在那里运行聊天服务器

    然后,您可以让节点直接在端口80(即HTTP端口)上服务,或者让另一个web服务器在前面代理到您的节点服务器。第二种方式更常见,通常人们选择在前面使用nginx

    对于nginx,您将有如下配置指令:

    location /experiments {
      proxy_pass       http://localhost:3000;
      proxy_set_header Host      $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
    
    这使得所有对
    /experiments
    (或以该路径开头的任何路径)的请求都转到节点服务器


    在nginx和node运行的情况下,您可以将浏览器指向
    mydomain.com/experiments
    ,它应该可以工作。

    首先,我只想确保您知道必须能够在服务器上运行nodejs。也就是说,您必须在服务器上安装节点并在那里运行聊天服务器

    然后,您可以让节点直接在端口80(即HTTP端口)上服务,或者让另一个web服务器在前面代理到您的节点服务器。第二种方式更常见,通常人们选择在前面使用nginx

    对于nginx,您将有如下配置指令:

    location /experiments {
      proxy_pass       http://localhost:3000;
      proxy_set_header Host      $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
    
    这使得所有对
    /experiments
    (或以该路径开头的任何路径)的请求都转到节点服务器

    有了这个功能,nginx和node运行后,您可以将浏览器指向
    mydomain.com/experiments
    ,它应该可以正常工作