Ответ 1
Чтобы заставить это работать, мне нужно было свернуть SELinux, а затем добавить косые черты в строки "localhost: 8000".
Здесь код для отключения SELinux:
echo 0 >/selinux/enforce
Мой сервер отлично справлялся до вчерашнего дня. Он работал Redmine, и это был самый счастливый маленький сервер , пока мой "друг" не импортировал таблицу SQL, мой маленький парень не мог взять. К сожалению, после часа, пытаясь заставить парня-лила ответить, нам пришлось задействовать его.
Теперь после перезагрузки мы получаем ошибку 503 при попытке посетить домен, подключенный к Redmine. Он подключился к Mongrel, и мы используем Apache Proxy для перенаправления всех подключений к порту Redmine.
Используя Lynx на сервере (http://localhost:8000
), вы можете увидеть, как приложение Ruby работает нормально. Но этот бит не работает в моем конфигурационном файле Apache:
<VirtualHost *:80>
ServerName sub.example.com
ProxyPass / http://localhost:8000
ProxyPassReverse / http://localhost:8000
ProxyPreserveHost on
LogLevel debug
</VirtualHost>
Здесь вывод журнала ошибок для Apache:
[debug] mod_proxy_http.c(54): proxy: HTTP: canonicalising URL //localhost:8000 [debug] proxy_util.c(1335): [client 216.27.137.51] proxy: http: found worker http://localhost:8000 for http://localhost:8000/ [debug] mod_proxy.c(756): Running scheme http handler (attempt 0) [debug] mod_proxy_http.c(1687): proxy: HTTP: serving URL http://localhost:8000/ [debug] proxy_util.c(1755): proxy: HTTP: has acquired connection for (localhost) [debug] proxy_util.c(1815): proxy: connecting http://localhost:8000/ to localhost:8000 [debug] proxy_util.c(1908): proxy: connected / to localhost:8000 [debug] proxy_util.c(2002): proxy: HTTP: fam 2 socket created to connect to localhost [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:8000 (localhost) failed [error] ap_proxy_connect_backend disabling worker for (localhost) [debug] proxy_util.c(1773): proxy: HTTP: has released connection for (localhost)
Чтобы заставить это работать, мне нужно было свернуть SELinux, а затем добавить косые черты в строки "localhost: 8000".
Здесь код для отключения SELinux:
echo 0 >/selinux/enforce
Apache ответит 503 не менее 60 секунд в любое время, когда обнаруживает, что сервер backend работает. Это поведение по умолчанию. Как и в вашем примере, если вы перезагрузите свой серверный сервер (Rails в этом примере), и кто-то попытается получить к нему доступ через прокси-сервер Apache до того, как Rails будет готов, Apache вернет 503 в течение следующих 60 секунд, независимо от того, будет ли ваш backend теперь "вверх", Пожалуйста, просмотрите документы apache на ProxyPass, где указано:
повторить 60
Таймер ожидания повторного использования пула соединений в секундах. Если рабочий пул соединений на сервере backend находится в состоянии ошибки, Apache не будет перенаправлять какие-либо запросы на этот сервер до истечения таймаута. Это позволяет отключить серверный сервер для обслуживания и вернуть его позже через Интернет. Значение 0 означает, что всегда нужно повторять попытку в состоянии ошибки без тайм-аута.
Итак, если вы установите Proxy Pass для включения retry = 0, вы не увидите 503 при перезапуске вашего backend-сервиса. Это также полезно при использовании Apache в качестве обратного прокси во время разработки! Например:
ProxyPass/http://localhost:8000 retry = 0
Выполнить следующую команду
# /usr/sbin/setsebool httpd_can_network_connect 1
ИЛИ
# /usr/sbin/setsebool httpd_can_network_connect true
и после этого перезапустите httpd
# service httpd restart
Вы уверены, что они перезапускаются в правильном порядке? У меня были странные проблемы, когда Apache запускается, затем запускается Mongrel, и хотя Mongrel запущен, Apache все еще бросает прокси-ошибку.
Я решил это в прошлом с различными заклинаниями и перезапусками Apache, и в конечном итоге боги счастливы. Кажется, что иногда процессы Mongrel не закрываются должным образом, поэтому вам приходится вручную их убивать. Здесь ссылка с некоторой [возможной] помощью.
В итоге я добавил параметр "убить" в мой /etc/init.d/
mongrel script, потому что это произошло так много. Он остановил Mongrel, убил все сессии Mongrel, начал Mongrel и перезапустил Apache.
<snip>
kill)
echo "Stopping, killing, starting, and restarting Apache..."
mongrel_cluster_ctl stop -c $CONF_DIR --clean
killall -u mongrel
mongrel_cluster_ctl start -c $CONF_DIR --clean
/etc/init.d/httpd restart
RETVAL=$?
;;
</snip>
Возможно, это не очень хорошее решение, но зло ушло.
Попробуйте запустить monit, чтобы контролировать ваших mogrels за Apache, и таким образом он может перезапустить mongrels для вас, если они умрут или слишком голодны для памяти. Если по какой-либо причине Apache все еще запутывается, вам просто нужно изящно перезапустить apache, и он должен решить себя, но в 99% случаев, когда monit смотреть над вашими ублюдками, следует избегать этого снова. Другой вариант - посмотреть на Phusion Passenger.
Сначала проверьте, прослушивает ли порт 8080 или нет, следующей командой
netstat -tlpn
Если не перезапустить сервер jenkins с помощью следующей команды
sudo /etc/init.d/jenkins start
Теперь он должен работать. Надеюсь, что это поможет.
Кулак, вы должны установить selinux
: (SELinux означает Security-Enhanced Linux.)
apt-get install selinux
После этого вы можете включить политику безопасности SElinux, выполнив следующую команду:
sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
Примечание:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
Финал, перезапустите apache!