Passenger,Plesk和Node.js:已在使用的地址

时间:2017-10-23 13:48:59

标签: node.js nginx passenger plesk

我的问题是让Phusion Passenger和Plesk Onyx 17.5.3很好地协同工作。我有一台运行Ubuntu 16.04的新服务器。

我正在关注部署Node.js应用程序的官方Phusion Passenger tutorial,并且我已成功跟踪它到tell Passenger to listen on port 80所需的位置。

以下是我的步骤:

  • 在我的注册商处,我为子域pass.domain.com
  • 设置了DNS条目
  • 在Plesk界面中,我定义了新的子域
  • 如果我在浏览器中访问http://pass.domain.com,我会获得默认的Plesk网页。
  • 我遵循“Phusion Passenger:Node.js教程”直到reach this command

sudo passenger start --port 80 --user someusername --environment production --daemonize

  • 注意:我在'someusername'处使用有效的自定义用户名。
  • 我收到此错误:
Could not start the Nginx engine:  
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
nginx: [emerg] still could not bind()

看来Plesk已经在这个地址提供默认网页,因此Phusion Passenger无法访问它。我需要添加或编辑哪些文件才能让Plesk发布地址,以便乘客可以使用它?

编辑4:我发现this question描述了类似的症状。然而OP正在使用Meteor Up而我正在使用Passenger。他的解决方案是让Meteor Up告诉Node.js在端口3001上运行,并让nginx监听端口80并向端口3001发送代理请求。我已经知道Phusion Passenger已经做了类似的事情。

有没有办法修改passenger start命令来澄清这个?

较旧EDITS

编辑1:响应@TarunLalwali,这是此服务器上sudo netstat -plnat的输出:

$ sudo netstat -plnat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:4190            0.0.0.0:*               LISTEN      15234/dovecot   
tcp        0      0 127.0.0.1:12768         0.0.0.0:*               LISTEN      15654/psa-pc-remote
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      15234/dovecot   
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN      15234/dovecot   
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      2293/mongod     
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      15234/dovecot   
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      15234/dovecot   
tcp        0      0 127.0.0.1:783           0.0.0.0:*               LISTEN      1315/.spamassassin
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26659/nginx     
tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN      23894/config    
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      2142/master     
tcp        0      0 172.17.0.1:53           0.0.0.0:*               LISTEN      17312/named     
tcp        0      0 94.76.206.212:53        0.0.0.0:*               LISTEN      17312/named     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      17312/named     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1413/sshd       
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      12563/passenger-sta
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      17312/named     
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2142/master     
tcp        0      0 94.76.206.212:443       0.0.0.0:*               LISTEN      26659/nginx     
tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      23894/config    
tcp        0      0 94.76.206.212:993       92.130.47.95:49994      ESTABLISHED 15322/imap-login
tcp        0      0 127.0.0.1:51168         127.0.0.1:12768         TIME_WAIT   -               
tcp        0      0 94.76.206.212:25        200.188.141.75:51400    TIME_WAIT   -               
tcp        0    188 94.76.206.212:22        92.130.47.95:34414      ESTABLISHED 4035/sshd: blacksla
tcp6       0      0 :::4190                 :::*                    LISTEN      15234/dovecot   
tcp6       0      0 :::993                  :::*                    LISTEN      15234/dovecot   
tcp6       0      0 :::995                  :::*                    LISTEN      15234/dovecot   
tcp6       0      0 :::7080                 :::*                    LISTEN      26432/apache2   
tcp6       0      0 :::7081                 :::*                    LISTEN      26432/apache2   
tcp6       0      0 127.0.0.1:3306          :::*                    LISTEN      10040/mysqld    
tcp6       0      0 :::106                  :::*                    LISTEN      1532/xinetd     
tcp6       0      0 :::110                  :::*                    LISTEN      15234/dovecot   
tcp6       0      0 :::143                  :::*                    LISTEN      15234/dovecot   
tcp6       0      0 ::1:783                 :::*                    LISTEN      1315/.spamassassin
tcp6       0      0 2a02:af8:1:900::3860:80 :::*                    LISTEN      26659/nginx     
tcp6       0      0 :::8880                 :::*                    LISTEN      23894/config    
tcp6       0      0 :::465                  :::*                    LISTEN      2142/master     
tcp6       0      0 :::53                   :::*                    LISTEN      17312/named     
tcp6       0      0 :::21                   :::*                    LISTEN      1532/xinetd     
tcp6       0      0 :::22                   :::*                    LISTEN      1413/sshd       
tcp6       0      0 :::25                   :::*                    LISTEN      2142/master     
tcp6       0      0 2a02:af8:1:900::386:443 :::*                    LISTEN      26659/nginx     
tcp6       0      0 :::8443                 :::*                    LISTEN      23894/config 

注意:我已在Plesk forum上询问过此问题,但未收到任何回复。我希望在这里询问Phusion Passenger社区会更有成效。一旦我有了一个有效的解决方案,我会在Plesk论坛上发布一个链接到这里的答案。

提前感谢您的见解,

詹姆斯

编辑2:按照@ TarunLalwali的建议,我尝试停止nginx,但这产生了一个未知错误:

$ sudo nginx -s stop
$ sudo passenger start --port 80 --user node --environment production --daemonize
Could not start the Nginx engine:
nginx: [alert] Unable to start the Phusion Passenger watchdog because it encountered the following error during startup: Unable to start the Passenger core: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)

编辑3:在调用Passenger之前尝试在服务器范围内禁用nginx:

$ sudo systemctl disable nginx
Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable nginx
insserv: warning: current start runlevel(s) (empty) of script `nginx' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `nginx' overrides LSB defaults (0 1 6).

$ systemctl status nginx
* nginx.service - Startup script for nginx service
  Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
  Active: inactive (dead)

$ sudo passenger start --port 80 --user node --environment production --daemonize
Could not start the Nginx engine:
nginx: [alert] Unable to start the Phusion Passenger watchdog because it encountered the following error during startup: Unable to start the Passenger core: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)

1 个答案:

答案 0 :(得分:0)

您提到需要系统Nginx(在端口80)才能在服务器上运行其他子域。

Passenger Standalone可以通过两个步骤与系统Nginx和平共存:

  1. 在非冲突端口上运行它,例如默认值3000:

    sudo passenger start --port 3000 --user someusername --environment production --daemonize

  2. 对于您希望Passenger服务器的域,请告知系统Nginx代理Passenger。

    proxy_pass http://localhost:3000;

  3. 请记住重新加载/重新启动Nginx以激活配置。

    如何在Plesk中完全执行第2步是在Plesk论坛上提出的最佳问题,但从乘客的角度来看,此设置应该有效。