代理错误 502,在 apache2 服务器上运行节点 js 应用程序

Posted

技术标签:

【中文标题】代理错误 502,在 apache2 服务器上运行节点 js 应用程序【英文标题】:Proxy error 502 , run node js app on apache2 server 【发布时间】:2017-01-23 18:45:50 【问题描述】:

我正在尝试在 Apache 服务器侦听端口 80 上运行 Node.js 应用程序 这是我的虚拟主机文件:

    <VirtualHost *:80>

ServerName mikus

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ProxyPreserveHost On

ProxyPass /node http://localhost:8000/
ProxyPassReverse /node  http://localhost:8000/
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined </VirtualHost>

这是我的 app.js 文件:

var express = require('express');
var app = express();


app.get('/node', function(req, res) 
  res.setHeader('Content-Type', 'text/plain');
  res.end('Welcome apache');
);

app.listen(8000, 'localhost');

当我尝试在 'localhost/node' 或 ip_adress/node 上运行应用程序时,我遇到了 502 代理错误:代理服务器收到来自上游服务器的无效响应。 代理服务器无法处理请求 GET /node。

原因:DNS 查找失败:localhost

Apache/2.4.7 (Ubuntu) 服务器位于 127.0.0.1 端口 80。

谢谢。

【问题讨论】:

【参考方案1】:

app.js中启用代理:

app.enable('trust proxy');

并修复 node.js 中有效路由的 uri:

ProxyPass /node http://localhost:8000/node
ProxyPassReverse /node  http://localhost:8000/node

【讨论】:

嗨卢卡斯,感谢您的快速回答,不幸的是我仍然有同样的错误.. 是的,如果我运行 'node app.js' 并转到 localhost:8000/node 路由,它就可以工作。 抱歉,在 Apache 中我不知道在做什么。 Node.js 与 nginx 配合得很好,因为 Nginx 比 Apache 更适合提供静态文件。在 Nginx 中配置反向代理也很有效。也许是你感兴趣的搜索和尝试。【参考方案2】:

localhost 可能是 ipv6 地址,试试 127.0.0.1 insteed

【讨论】:

以上是关于代理错误 502,在 apache2 服务器上运行节点 js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Mod_Proxy 502-代理错误间歇性

socket.io 502 错误

出错代码502,是指啥,怎样解决?

AWS Spring Boot 应用程序的 502 错误请求

当我的代理出现内部错误时,返回 502 状态码是不是正确?

Yarp 反向代理 - 响应 502 错误网关