У меня есть приложение 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 без проблем.