Я создаю простой сайт, использующий npm для разработки, и он размещается у провайдера с поддержкой php.
Единственный функционал, который использует php — это контактная форма для отправки электронной почты. остальное — это простые html и javascript.
Я использую простой PHP-сервер в разработке, начатой с php -S localhost:8000
протестировать простой скрипт электронной почты php и снова в dev я обращаюсь запросы прокси для email.php
на этот сервер php локально.
Приложение Node находится на порте 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, которые я могу просматривать в браузере. Я проверяю это с локон и кажется, что он обрабатывает запрос очень хорошо, когда отправляется непосредственно на localhost: 8000 с помощью curl.
Не уверен, почему я получаю эту ошибку, почесывая голову, не могу придумать ни одной причины.
Помощь очень ценится.
Я понял, что это было, да! Ну, я выложу ответ, если кто-то еще наткнется на это.
В этом виноват PHP; Проверка сокетов прослушивания порта с помощью ss -ltn
(Я на Linux, это может не сработать для вас) Я понял, что php-сервер прослушивает только IPv6. Соответствующий вывод следующим образом:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 ::1:8000
С соответствующим поиском я нашел ответ на странице документации веб-сервера под примечаниями пользователя, опубликованными пользователем. Смотрите пост Вот. Решение состоит в том, чтобы использовать 127.0.0.1 вместо localhost:
Как оказалось, если вы запустили сервер php с «php -S
localhost: 80 «сервер будет запущен только с поддержкой ipv6!Чтобы получить к нему доступ через ipv4, вам нужно изменить команду запуска, например:
Итак: «php -S 127.0.0.1:80», который запускает сервер только в режиме ipv4.
Других решений пока нет …