javascript - Node.js 服务器从 localhost 更改为 apache

标签 javascript node.js apache

我应该如何在 apache 服务器上运行我的 node.js 代码,它当前使用本地主机和端口 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>

最佳答案

您将需要使用在 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 中设置反向代理。

关于javascript - Node.js 服务器从 localhost 更改为 apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908361/

相关文章:

javascript - json 字符串显示在控制台中,但 php 变量 print null

javascript - 如果手动单击 URL 并打开一个新选项卡,打开的选项卡是否仍然可以获取对单击 URL 的窗口的引用?

javascript - 将mongo db连接到远程服务器nodejs

node.js - Node 服务器运行几天后,socket.io 变得缓慢且无响应

javascript - 渲染页面时如何从 Handlebars 获取 Angular 数据

python - 使用 SERVER_NAME 时 Flask 404

javascript - Angular 2 中 jQuery ajaxStart 的等效项

javascript - Grunt/NPM Uglify 不喜欢这个 JS 行

apache - Wordpress 页面随机充当 RSS/XML 内容

php - 412 - 使用 X-SendFile 传送的文件的前提条件失败