У вас есть хосты разработки, на которых мы пытаемся запустить Apache / PHP и Node.js. В идеале простой ProxyPass для служб узлов, работающих с локальным портом, должен работать, но по какой-то причине мне нужно указать IP-адрес локальной сети, localhost выдает ошибку 503.
$ cat nodeproxy.conf
<Directory /public/np1/site>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<VirtualHost *:80>
ServerName np1.local.zaptech.org
DocumentRoot /public/np1/site
ProxyRequests on
# ProxyPass /np1/ http://localhost:1337/ <- doesn't work, 503 error
# ProxyPass /np1/ http://127.0.0.1:1337/ <- doesn't work, 503 error
ProxyPass /np1/ http://10.10.10.76:1337/
</VirtualHost>
$ cat sysd
[Unit]
Description=Node.js Example Server
[Service]
ExecStart=/bin/node /home/rickatech/node/example.js
Restart=always
RestartSec=10 # Restart service after 10 seconds if node service crashes
StandardOutput=syslog # Output to syslog
StandardError=syslog # Output to syslog
SyslogIdentifier=nodejs-ricktest
User=rickatech
Environment=NODE_ENV=production PORT=1337
[Install]
WantedBy=multi-user.target
Простым ответом будет то, что служба, работающая на порту 1337, привязана только к первичному IP-адресу, а не к localhost, вы можете использовать netstat, lsof или аналогичные, чтобы узнать.
Я не знаю node.js, но уверен, что быстрый поиск найдет сообщения, в которых рассказывается, как привязать node.js к localhost, если это не так.
Одно небольшое примечание: вы всегда должны использовать завершающие слэши в директивах ProxyPass (и ProxyPassReverse). Так например
ProxyPass /np1/ http://localhost:1337/ or ProxyPass /np1 http://localhost:1337
вместо того
ProxyPass /np1 http://10.10.10.76:1337/ or ProxyPass /np1/ http://10.10.10.76:1337
Обычно, если нет особой причины не делать этого, на обеих сторонах должны быть завершающие слэши.
Ах, кроличья нора здесь немного глубже ...
$ cat example.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Hello World\n');
}).listen(1337, "10.10.10.76"); // change this to 127.0.0.1 !
Порт находится в javascript, не знаю, зачем sysd вообще нужна директива PORT.