Назад | Перейти на главную страницу

Локальный адрес CentOS 7.2 / ProxyPass в порядке, ошибка localhost и 127.0.0.1

У вас есть хосты разработки, на которых мы пытаемся запустить 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.