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

Nginx не отвечает с приложением rails, развернутым на экземпляре aws ec2 с использованием capistrano

У меня есть приложение rails, развернутое через capistrano на экземпляре aws ec2, и на сервере также установлен пассажирский nginx. Всякий раз, когда я пытаюсь получить доступ к своему приложению с помощью DNS или предоставленного общедоступного IP-адреса, все, что я получаю, - это загрузка браузера на некоторое время, заканчивающаяся без ответа, даже без страницы с ошибкой от nginx. Вот моя конфигурация nginx (/ 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()

Я часами искал решение, но не смог получить доступ к своему приложению. Любая помощь, даже указание в правильном направлении, будет очень признательна. Если потребуется дополнительная информация, дайте мне знать.

РЕДАКТИРОВАТЬ

В 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 и получил тот же результат, а при вводе sudo nginx получаю тот же ответ, что и выше.

РЕДАКТИРОВАТЬ 2

После долгих поисков в Google я нашел эту команду «sudo lsof -i: 80», и вот результат, который она выдает. Если это поможет, предложите свои решения, прошло довольно много времени с тех пор, как я застрял в этой проблеме.

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 работает несколько подключений, которые в конечном итоге мешают ему отвечать, я могу ошибаться, но, пожалуйста, предложите свои решения.

Я даже удалил файл по умолчанию из / etc / nginx / sites-enabled / default, создал новый файл конфигурации и также связал его символической ссылкой, но проблема осталась той же. Я также проверил свою группу безопасности экземпляра ec2, она разрешает входящий трафик на 80 порт отовсюду. Может быть какая-то другая проблема, или я ищу решения не в том направлении?

Бег sudo netstat -tulpn | grep :80 дает следующий вывод

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

Также, чтобы указать, что я развернул ветвь репозитория моего проекта, а не саму главную ветку после ее развертывания и работы, я планирую объединить ветку, чтобы освоить и развернуть ее снова.

РЕДАКТИРОВАТЬ3

Я пробовал это со своего локального терминала:

telnet <public ip> 80

и это ответ, который я получаю

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

У вас есть процесс, который уже привязывается к порту 80. Проверить это через

netstat -ntp | find "80"

Как только вы получите его PID (например, 1234), отправьте сигнал для корректного завершения процесса:

kill -15 1234

Если это не помогает и процесс все еще работает, подождите немного, а затем отправьте другой тип сигнала в PID:

kill -9 1234

После этого вы можете снова запустить Nginx без проблем.