在同一端口上运行apache服务器和节点

时间:2017-04-27 08:08:16

标签: node.js

我正在使用MAMP服务器和节点js。

我的问题是我想在同一个端口上运行apache服务器和节点,但是在线解决方案非常复杂,因为它没有服务于大部分目的,我也是Node的新手。 我需要一个简单的解决方案,我可以在apache服务器的端口上节点。

代码如下,

它工作正常,因为一切都在不同的端口运行,但我想要的服务器'在运行apache的端口8888上运行。或者某种方式让节点与apache进行交互

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

var connection = mysql.createConnection({
    host : 'localhost',
    user : 'root',
    password : 'root',
    database : 'db',
    port : '8889'
});

server.listen(8888); <----- ERROR
console.log('server running.......');

connection.connect(function(error){
    if(!!error) {
        console.log('error in db connection');
    } else {
        console.log('db connected');
    }
});

app.use('/*', router);

router.get('/*', function (req, res) {
    console.log('hello there...');
});

3 个答案:

答案 0 :(得分:0)

您可以使用http-proxy

var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
    hostnameOnly: true,
    router: {
        '127.0.0.1':        '127.0.0.1:8080'
    }
});

proxyServer.listen(8888);

这将创建一个节点进程,侦听端口 8888 ,并将请求的域转发到 8080

答案 1 :(得分:0)

你会发现很多关于这个主题的教程,但这里有一个概述:

  • 你需要apache mod mod_proxy

  • 基本设置你需要像this这样的东西, 此链接包含有关如何以某种方式设置它的说明,它还会转发您的websockets(如果您需要)。

  • 你会使用像http://localhost:3005这样的东西,其中3005是运行端口nodejs。 (选择你喜欢的任何端口)

  • 将此端口添加到iptables以阻止直接访问(不使用apache)可能很有用

答案 2 :(得分:0)

我认为正确的方法是使用Apache的Proxypass“面对”Node服务。这将转发到在不同端口上运行的节点服务的路径。

将以下内容添加到httpd.conf或vhost下并重新启动Apache应该会给你一个工作结果

#I'm using 8890 for Node since your Apache runs on 8888 and DB is on 8889
ProxyPass /node/ http://localhost:8890/
ProxyPassReverse /node/ http://localhost:8890/

导航到http://localhost:8888/node/会将您连接到端口8890上运行的节点服务。