【问题标题】:Node.js server changing from localhost to apacheNode.js 服务器从 localhost 更改为 apache
【发布时间】:2014-02-20 12:51:30
【问题描述】:

我应该如何在 apache 服务器上运行我的 node.js 代码,该服务器当前使用 localhost 和端口 5000 到 apache 服务器,端口 8080。 这是我的服务器端代码 chatserver.js

var httpd = require('http').createServer(handler);
var io = require('socket.io').listen(httpd);
var fs = require('fs');

httpd.listen(5000);

function handler(req, res) {
  fs.readFile(__dirname + '/index.html',
    function(err, data) {
      if (err) {
       res.writeHead(500);
       return res.end('Error loading index.html');
      }

      res.writeHead(200);
      res.end(data);
    }
  );
}

io.sockets.on('connection', function (socket) {
  socket.on('clientMessage', function(content) {
    socket.emit('serverMessage', 'You said: ' + content);
    socket.broadcast.emit('serverMessage', socket.id + ' said: ' + 
      content);
  });
}); 

这是我的客户端代码。 index.html

<html>
  <head>
    <title>Node.js WebSocket chat</title>
    <style type="text/css">
      #input {
        width: 200px;
      }
      #messages {
        position: fixed;
        top: 40px;
        bottom: 8px;
        left: 8px;
        right: 8px;
        border: 1px solid #EEEEEE;
        padding: 8px;
      }
    </style>
  </head>

  <body>

    Your message:
    <input type="text" id="input">

    <div id="messages"></div>

    <script src="http://localhost:5000/socket.io/socket.io.js"></script>
    <script type="text/javascript">
      var messagesElement = document.getElementById('messages');
      var lastMessageElement = null;

      function addMessage(message) {
        var newMessageElement = document.createElement('div');
        var newMessageText = document.createTextNode(message);

        newMessageElement.appendChild(newMessageText);
        messagesElement.insertBefore(newMessageElement, 
          lastMessageElement);
        lastMessageElement = newMessageElement;
      }

      var socket = io.connect('http://localhost:5000');
      socket.on('serverMessage', function(content) {
        addMessage(content);
      });

      var inputElement = document.getElementById('input');

      inputElement.onkeydown = function(keyboardEvent) {
        if (keyboardEvent.keyCode === 13) {
          socket.emit('clientMessage', inputElement.value);
          inputElement.value = '';
          return false;
        } else {
          return true;
        }
      };
    </script>

  </body>
</html>

【问题讨论】:

标签: javascript node.js apache


【解决方案1】:

您需要使用在 httpd.conf 文件中配置的反向代理。我使用 nginx 来做这件事,因为它比 apache2 更快,更强大。

这是我的 nginx 配置文件:

server {
    listen 80;
    server_name personal.dev.x.onmylemon.co.uk;

    access_log  /var/log/nginx/dev.x.oml.access.log;
    error_log   /var/log/nginx/dev.x.oml.error.log;

    location / {
        # This is the url to your node app on the localhost
        proxy_pass              http://localhost:30450;

        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout   150;
        proxy_send_timeout      100;
        proxy_read_timeout      100;

        proxy_buffers           4 32k;

        client_max_body_size    8m;
        client_body_buffer_size 128k;
    }
}

有一些文档here 用于在 apache 中设置反向代理。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2018-12-04
    • 2015-06-09
    • 2015-02-14
    相关资源
    最近更新 更多