CentOS 7.2 / ProxyPass 本地地址正常,localhost 和 127.0.0.1 错误

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

答案1

简单的答案是,在端口 1337 上运行的服务仅绑定到主 IP 地址而不是本地主机,您可以使用 netstat、lsof 或类似程序来查找。

我不了解 node.js,但我确信快速搜索就会找到帖子告诉你如何让 node.js绑定到本地主机(如果不是)。

需要注意的是,你应该始终在 ProxyPass(和 ProxyPassReverse)指令中匹配尾部斜杠。例如

ProxyPass /np1/ http://localhost:1337/
或者
ProxyPass /np1 http://localhost:1337

代替

ProxyPass /np1 http://10.10.10.76:1337/
或者
代理密码 /np1/ http://10.10.10.76:1337

通常情况下,除非有特殊原因,否则应该在两者上都加上斜杠。

答案2

啊,这个兔子洞有点深……

$ cat 示例.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 指令。

相关内容