使用node-http-proxy从NodeJS到Apache的反向代理不起作用

时间:2013-12-16 14:17:53

标签: node.js apache web proxy

在我的vps上尝试使用node.js时,偶然发现了一个问题,我似乎无法修复。

我在ubuntu 13.04上有一个与node.js一起运行的apache服务器。我的想法是使用node-http-proxy创建反向代理。有足够的信息可以找到,但我似乎有一个我找不到的错误。

首先我更改了apache端口:

NameVirtualHost *:9000
Listen 9000

然后我有我的hello.js文件:

var http = require('http');
var httpProxy = require('http-proxy');

var options = {
        router: {
                'somesite.com': '127:0:0:1:9000'
        }
}

var proxyServer = httpProxy.createServer(options).listen(80);

console.log("Proxy server running!");

最后是apache somesite.com config:

<VirtualHost *:9000>
        ServerName somesite.com
        ServerAdmin info@somesite.com
        ServerAlias www.somesite.com

        DocumentRoot /var/www/somesite.com/public_html
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我在public_html中有一个基本的html文件,以确保一切正常。 当我启动两台服务器并转到somesite.com时,我只看到一个空白的wepbage(如果我检查源没有什么,而不是我自己的文件)。

如果我在另一个端口上启动一个简单的节点服务器并将流量路由到该端口,那就行了,所以我假设我的问题与apache有关,但我无法弄清楚出了什么问题。

编辑1: 显然我的代理只适用于somesite.com而不是www.somesite.com。如果我去somesite.com,我会得到:

 An error has occurred: {"code":"EINVAL","errno":"EINVAL","syscall":"connect"}

编辑2: 如果我从apache检查访问和错误日​​志,它似乎永远不会收到任何东西。没有找到我的消息

编辑3: 我更改了nodejs正在侦听的端口,认为可能以root身份运行与它有关,但即使在随机高端口上运行,它也无法正常工作。它似乎无法在自身和apache套接字之间建立连接(当我直接浏览它时,它可以正常工作)。

1 个答案:

答案 0 :(得分:0)

显然在hello.js脚本中用localhost替换127.0.0.1就可以了。不完全确定原因(我猜它与我的主机文件有关),但它确实有效。