2017-09-30 6 views
0

개발을 위해 npm을 사용하는 간단한 웹 사이트를 구축 중이며 php를 지원하는 제공 업체와 호스팅됩니다.Express.js 로컬 호스트의 내장 서버에 파이핑 요청 ECONNREFUSED 결과

php를 사용하는 유일한 기능은 이메일을 보내기위한 문의 양식입니다. 나머지는 간단한 html과 javascript입니다.

php -S localhost:8000으로 시작된 개발에서 간단한 PHP 서버를 사용하여 간단한 PHP 이메일 스크립트를 테스트하고 다시 dev에이 PHP 서버에 email.php에 대한 역방향 프록시 요청을 다시 테스트합니다.

노드 응용 프로그램은 포트 3000에와 PHP 서버 문제는 내가 요청이 로컬 호스트를 통과 할 때 연결에 다음 급행 서버 구성 오류를 거부 얻을 수있다 포트 8000에 : 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을 사용하여 localhost : 8000에 직접 게시 할 때 요청을 잘 처리하는 것처럼 보입니다.

왜 내 머리를 긁으면이 오류가 발생하는지 잘 모르는 이유가 없습니다.

도움을 많이 받으실 수 있습니다.

+0

익스프레스 서버가 동일한 서버에서 실행되고 있습니까? –

답변

2

나는 그게 무엇인지 알아 냈습니다. 다른 누군가가이 문제에 직면 할 경우를 대비하여 답변을 게시 할 예정입니다.

PHP가 비난하는 것 같습니다. ss -ltn을 사용하여 포트를 수신하는 소켓을 확인합니다 (Linux에 있는데,이 방법은 작동하지 않을 수 있습니다). PHP 서버가 IPv6만을 인식한다는 것을 깨달았습니다. 관련 출력은 다음과 같습니다 :

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

관련 검색으로 나는 사용자가 게시 한 사용자 노트에서 웹 서버 설명서 페이지에서 답을 발견했다. 게시물 here을 참조하십시오. 이 솔루션은 로컬 호스트가 아닌 127.0.0.1을 사용하는 것입니다 : 서버가 IPv6 지원 만 시작됩니다 : 당신은 "80 PHP는 로컬 호스트를 -S"으로 PHP 서버를 시작하면

그것은, 알고 보니!

ipv4를 통해 액세스하려면 과 같은 시작 명령을 변경해야합니다. 즉, "php -S 127.0.0.1:80"은 ipv4 모드에서만 서버를 시작합니다.