当前位置: 首页 > 知识库问答 >
问题:

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

冉伯寅
2023-03-14

在我的vps上试验Node.js时,我偶然发现了一个似乎无法解决的问题。

在Ubuntu13.04上,我有一个apache服务器与node.js一起运行。我的想法是使用Node-HTTP-Proxy创建一个反向代理。关于这一点的足够的信息可以找到,但我似乎有一个我找不到的错误。

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配置:

<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时,我只看到一个空白的webbage(如果我检查source,则没有任何东西,而不是我自己的文件)。

如果我在另一个端口上启动一个简单的节点服务器,并将流量路由到该端口,那么这是可行的,所以我假设我的问题与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个答案

楚天宇
2023-03-14

显然,在hello.js脚本中用localhost替换127.0.0.1起到了作用。不完全确定为什么(我猜这与我的hosts文件有关),但它起作用了。

 类似资料:
  • 我有一个Apache-Server在端口80上运行我的PHP应用程序。PHP应用程序通过端口3000与NodeJS-Server(socket.io)通信。

  • 我有一个带有Express和Socket.io(Ubuntu18.04)的Nodejs服务器应用程序。在nGinx(1.14)反向代理进入场景之前,它总是工作得很好。nginx服务器运行在Node.js应用程序的不同机器上,每个应用程序都在同一网络中的自己的虚拟机上。 2.1.1版本上的服务器和客户端。 我还尝试删除path选项,并为socket.io东西配置了一个特定的/位置(出于测试目的):

  • 据我所知,问题必须与Ngnix反向代理和websockets如何路由有关。服务器对ping请求的答复似乎没有发送到客户端。但我似乎无法确定原因。任何帮助都是非常感谢的。

  • 我最近开始在我的DigitalOcean Droplet(根访问服务器)中使用CloudFlare(反向代理),在那里我设置了部署。 恢复功能的最佳方法是什么?

  • 下面是使用“ProxyPass”和“ProxyPassReverse”的apache反向代理配置片段 当我在wget命令下面运行时,它不知何故重定向到http: 如果我使用“/artifactory/webapp/#/home”运行wget命令,它可以在HTTPS上工作: 我没有在代理配置文件的任何地方定义重定向。 有人能提出这种行为背后的原因吗??如何避免将其重定向到HTTP?

  • 我有一个apache服务器在运行,在这个服务器上我也有一个mongo数据库在运行,监听标准端口27017。 我试过这个,但似乎一点也不起作用: