Nginx没有响应使用capistrano在aws ec2实例上部署rails应用程序

我有一个rails应用程序通过capistrano在aws ec2实例上部署,并且在服务器上也安装了nginx客户端。 每当我尝试使用提供的DNS或公共IP访问我的应用程序时,我所得到的只是浏览器加载了一段时间而没有响应,甚至没有从nginx的错误页面。 这里是我的nginxconfiguration(/ etc / nginx / sites-enabled / default)

server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name <public ip>; passenger_enabled on; rails_env production; root /home/ubuntu/myapp/current/public; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 

在运行命令“sudo nginx”时,这是我得到的回应:

 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() 

我花了几个小时寻找解决scheme,但一直无法访问我的应用程序。 任何帮助甚至指导正确的方向将非常感激。 如果有需要的信息,请让我知道。

编辑

在error.log里面,这是我得到的:

 [ 2015-07-21 12:59:54.2681 21794/7eff039a4700 age/Cor/Main.cpp:507 ]: Signal received. Gracefully shutting down... (send signal 2 more time(s) t$ [ 2015-07-21 12:59:54.2681 21794/7eff0a1747c0 age/Cor/Main.cpp:876 ]: Received command to shutdown gracefully. Waiting until all clients have di$ [ 2015-07-21 12:59:54.2682 21794/7eff031a3700 Ser/Server.h:752 ]: [ApiServer] Freed 0 spare client objects [ 2015-07-21 12:59:54.2682 21794/7eff031a3700 Ser/Server.h:443 ]: [ApiServer] Shutdown finished [ 2015-07-21 12:59:54.2683 21794/7eff039a4700 Ser/Server.h:752 ]: [ServerThr.1] Freed 128 spare client objects [ 2015-07-21 12:59:54.2683 21794/7eff039a4700 Ser/Server.h:443 ]: [ServerThr.1] Shutdown finished [ 2015-07-21 12:59:54.2688 21794/7eff0a1747c0 age/Cor/Main.cpp:942 ]: Passenger core shutdown finished [ 2015-07-21 12:59:54.2695 21799/7fb5deb62700 age/Ust/Main.cpp:337 ]: Signal received. Gracefully shutting down... (send signal 2 more time(s) t$ [ 2015-07-21 12:59:54.2695 21799/7fb5e536d7c0 age/Ust/Main.cpp:399 ]: Received command to shutdown gracefully. Waiting until all clients have di$ [ 2015-07-21 12:59:54.2695 21799/7fb5deb62700 Ser/Server.h:752 ]: [LoggerApiServer] Freed 0 spare client objects [ 2015-07-21 12:59:54.2696 21799/7fb5deb62700 Ser/Server.h:443 ]: [LoggerApiServer] Shutdown finished [ 2015-07-21 12:59:54.2697 21799/7fb5e536d7c0 age/Ust/Main.cpp:424 ]: Passenger UstRouter shutdown finished [ 2015-07-21 12:59:55.3126 21887/7f0fcdb1e7c0 age/Wat/Main.cpp:1274 ]: Starting Passenger watchdog... [ 2015-07-21 12:59:55.3190 21890/7f1083bfc7c0 age/Cor/Main.cpp:957 ]: Starting Passenger core... [ 2015-07-21 12:59:55.3191 21890/7f1083bfc7c0 age/Cor/Main.cpp:234 ]: Passenger core running in multi-application mode. [ 2015-07-21 12:59:55.3288 21890/7f1083bfc7c0 age/Cor/Main.cpp:707 ]: Passenger core online, PID 21890 [ 2015-07-21 12:59:55.3356 21895/7fc7fb8a07c0 age/Ust/Main.cpp:430 ]: Starting Passenger UstRouter... [ 2015-07-21 12:59:55.3445 21895/7fc7fb8a07c0 age/Ust/Main.cpp:311 ]: Passenger UstRouter online, PID 21895 

我甚至试图释放端口80:使用

 sudo fuser -k 80/tcp 

导致:

 80/tcp: 22143 22146 22147 22148 22149 

这是否意味着它摧毁了5个连接到同一个端口,这可能是问题? 如果是,那么是否有办法维持一个连接到该端口的连接,即运行我的应用程序的进程的连接。

在这之后,我重新启动了nginx并得到了相同的结果,而且在inputsudo nginx时,我得到了和上面一样的响应

编辑2

经过大量的search,我发现这个命令“sudo lsof -i:80”,这里是它产生的输出,如果这有帮助,那么请build议你的解决scheme,因为我一直在这个问题上停留了一段时间。

 nginx 18275 root 6u IPv4 1213246 0t0 TCP *:http (LISTEN) nginx 18276 www-data 6u IPv4 1213246 0t0 TCP *:http (LISTEN) nginx 18277 www-data 6u IPv4 1213246 0t0 TCP *:http (LISTEN) nginx 18278 www-data 6u IPv4 1213246 0t0 TCP *:http (LISTEN) nginx 18279 www-data 6u IPv4 1213246 0t0 TCP *:http (LISTEN) 

我认为有80多个端口上运行多个连接,最终导致它无法响应,我可能是错的,但请build议您的解决scheme。

我甚至从/ etc / nginx / sites-enabled / default中删除了默认文件,创build了一个新的configuration文件,并将其链接了一下,但是问题依然如此。我也检查了我的ec2实例安全组,它允许入站stream量从各地的港口80。 有没有其他的问题或者我正在寻找解决scheme的错误方向?

运行sudo netstat -tulpn | grep :80 sudo netstat -tulpn | grep :80给出以下输出

 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 18878/nginx 

还要指出,我已经部署了我的项目的回购分支,而不是主分支本身,一旦其部署和工作,我打算合并分支掌握和再次部署。

EDIT3

我从本地terminal试过

 telnet <public ip> 80 

这是我得到的回应

 Trying <public ip>. Connected <public ip>. Escape character is '^]'. 

你有一个绑定到80端口的进程。 通过检查出来

 netstat -ntp | find "80" 

一旦你得到它的PID(例如1234)发送一个信号正常关机的过程:

 kill -15 1234 

如果没有帮助,进程仍在运行,请稍等一会,然后发送另一个信号types为PID:

 kill -9 1234 

之后,您可以再次启动Nginx,而不会出现任何问题。