Node.JS 应用程序未侦听分配的端口

Posted

技术标签:

【中文标题】Node.JS 应用程序未侦听分配的端口【英文标题】:Node.JS app not listening on assigned port 【发布时间】:2014-03-20 13:53:56 【问题描述】:

我有一个 Node.JS 应用程序,它应该在启动时监听端口 4567。理想情况下,端口应该显示在 nmap 和 netstat 的输出中,但由于某种原因,它不是。

启动应用程序不会打开端口。没有任何内容被写入 /var/log/syslog 来告诉我发生了什么,并且应用程序日志文件中也没有任何内容。我正在使用 Forever 来启动应用程序。

有什么线索吗?

应用的配置文件如下所示


"base_url": "http://mysity",
"port": "4567",
"use_port": true,
"secret": "settee",
"bind_address": "0.0.0.0",
"database": "redis",
"redis": 
    "host": "127.0.0.1",
    "port": "6379",
    "password": "secret",
    "database": "0"
,
"bcrypt_rounds": 12,
"upload_path": "uploads",
"relative_path": ""

Edit1:我正在使用 Forever 启动应用程序>“永远启动 app.js”

顺便说一句,我在本地安装上运行相同的应用程序,并且端口是打开的,我可以连接到应用程序,但不能连接到生产服务器上。

【问题讨论】:

显示一些代码如何启动服务器进程,我猜只是一个配置是不够的 已编辑帖子以显示用于启动应用程序的命令。希望这就是您想要的。 你在运行像 nginx 这样的反向代理吗? 最终,我会,但现在,不会。该应用程序的想法是使用 Nginx proxy_pass 从主站点的子域或子文件夹访问站点。现在,我只是尝试通过将端口附加到主站点的 url 来访问应用程序。配置 Nginx proxy_pass 会阻止端口显示在 nmap 和 netstat 的输出中吗? 你能贴出围绕“createServer()”的代码行吗? (应该在“app.js”或“server.js”中) 【参考方案1】:

尝试运行像 Nginx 这样的反向代理。基本上它的作用是监听浏览器端口(通常为 :80 但 HTTPS 为 :443),并将来自这些端口的请求中继到配置文件中指定的端口。 (nginx.conf)。

所以你的 nginx.conf 可能看起来像:

server 
    listen      80;
    server_name mysite.com www.mysite.com;
    access_log  /var/log/nginx/localhost.access.log;

    location / 
        proxy_pass       http://127.0.0.1:4567;
        proxy_redirect   off;
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy   true;
    

【讨论】:

我实际上是在本地安装上运行该设置并且它按预期工作,我可以从 Nginx 安装的子文件夹访问它,即使我使用的是 Nginx 版本不正确支持 websocket。但即便如此,应用程序的端口仍然显示在 nmap 和 netstat 的输出中。当我在生产服务器上设置 Nginx 代理传递时,就像我在本地安装一样,我收到此错误:“connect() failed (111: Connection refused) while connection to upstream, client: 127.0.0.1, request :“GET / HTTP/1.1”,上游:“127.0.0.1:4567”,主机。” 如果您使用 Nginx,则无需再将 :4567 附加到 URL(假设 proxy_pass 设置正确)。只需输入mysite.com,您的页面应该已经加载完毕。 [已编辑帖子] 删除了 : 和 4567 之间的空格 请注意,主站点是运行在 Nginx 和 php-fpm 上的 WP 站点,前面带有 Varnish。 Varnish 监听 80,而 Nginx 监听 8080。对于 Node 应用程序,我希望能够从子文件夹或子域访问它。我已经可以从本地安装中执行此操作,并且可以在 nmap 的输出中看到它的端口。请在ur1.ca/gw2gn查看与此相关的问题

以上是关于Node.JS 应用程序未侦听分配的端口的主要内容,如果未能解决你的问题,请参考以下文章

侦听http 80端口时Node.js EACCES错误(权限被拒绝)[重复]

侦听http 80端口时Node.js EACCES错误(权限被拒绝)[重复]

Node.js 远程调试不起作用

如何在 Cpanel 中为 Node.js 应用程序配置端口?

Heroku + node.js:我有一个使用多个端口的服务器。如何让 Heroku 分配它们?

为啥在端口 80 上运行 node.js 可能不安全?