向本地主机上的 php 内置服务器发出快速.js管道请求会导致 ECONNREFUSED



我正在使用 npm 构建一个简单的网站进行开发,它由支持 php 的提供程序托管。

使用php的唯一功能是发送电子邮件的联系表单。 其余的是简单的HTML和JavaScript。

我在开发中使用了一个简单的 php 服务器,从php -S localhost:8000开始测试一个简单的 php 电子邮件脚本,并在开发中再次反向代理请求email.php到本地此 php 服务器。

Node 应用程序位于端口 3000 上,PHP 服务器位于端口 8000 上。问题是当请求通过localhost:3000/email.php时,我收到以下快速服务器配置的连接被拒绝错误:

#!/usr/bin/env node
var express = require('express');
var app = express(),
request= require('request'),
port = +(process.env.PORT || 3000);

app.set('case sensitive routing', false);
app.post( '/email.php', function( req, res ){
req.pipe( request({
url: 'http://localhost:8000/email.php',
qs: req.query,
method: req.method
}, function(error){
if (error.code === 'ECONNREFUSED'){
console.error('Refused connection');
} else {
throw error;
}
})).pipe( res );
});

// other request handlers here
app.listen(port, function() {
console.log('listening');
});

Php服务器肯定已启动,并为端口8000上的所有页面提供服务,我可以使用浏览器浏览。我用curl测试了它,当使用 curl 直接发布到 localhost:8000 时,它似乎可以很好地处理请求。

不知道为什么我得到这个错误,挠头,想不出任何原因。

非常感谢帮助。

我想通了它是什么,哦!好吧,我将发布答案,以防其他人偶然发现这一点。

PHP似乎是罪魁祸首;使用ss -ltn检查侦听端口的套接字(我在Linux上,这可能不适合您)我意识到php服务器仅在侦听IPv6。相关输出如下:

State      Recv-Q Send-Q                                              Local Address:Port                                                             Peer Address:Port                
LISTEN     0      128                                                           ::1:8000                                                                       

通过相关搜索,我在用户发布的用户注释下的Web服务器文档页面上找到了答案。请参阅此处的帖子。解决方案是使用 127.0.0.1 而不是本地主机:

事实证明,如果您使用"php -S "启动 php 服务器 本地主机:80" 服务器将仅以IPv6支持启动!

要通过ipv4访问它,您需要更改启动命令,例如 所以:"php -S 127.0.0.1:80",它仅在IPv4模式下启动服务器。

最新更新