Почему я получаю ошибку Apache Proxy 503?
мой сервер был в порядке до вчерашнего дня. Он работает в Redmine, и это был самый счастливый маленький сервер до мой "друг" импортировал таблицу SQL, которую мой маленький парень не мог взять. К сожалению, после часа попыток заставить лил ответить, нам пришлось включить его.
Теперь после перезагрузки мы получаем ошибку 503 при попытке посетить домен, подключенный к Redmine. Он подключен к дворняга демон, и мы используйте прокси-сервер Apache для направления всех подключений к порту, на котором работает 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)
7 ответов
Apache будет реагировать с 503 в течение не менее 60 секунд каждый раз, когда он обнаруживает, что серверный сервер не работает. Это поведение по умолчанию. Как и в вашем примере, если вы перезагрузите бэкэнд-сервер (Rails в этом примере), и кто-то попытается получить к нему доступ через прокси-сервер Apache до того, как Rails будет готов, Apache вернет 503 в течение следующих 60 секунд, независимо от того, если ваш бэкэнд теперь "вверх". См. документы apache на ProxyPass, где указано:
повтор 60
работник пула соединений повторяет тайм-аут в секундах. Если работник пула соединений с серверной частью находится в состоянии ошибки, Apache не будет пересылать запросы на этот сервер до истечения времени ожидания. Это позволяет завершить работу бэкэнд-сервера для обслуживания и вернуть его в оперативный режим позже. Значение 0 означает, что работники всегда повторяют попытку в состоянии ошибки без таймаута.
поэтому, если вы установите свой пропуск прокси для включения retry=0 вы не будет видеть 503 при перезапуске бэкэнд-службы. Это также полезно при использовании Apache в качестве обратного прокси-сервера во время разработки! Например:
ProxyPass / http://localhost:8000 повтор=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/
сценарий шавки, потому что это произошло так много. Он остановил дворнягу, убил все сессии дворняги, запустил дворнягу и перезапустил 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 для мониторинга ваших полукровок за Apache, и таким образом он может перезапустить полукровок для вас, если они умрут или слишком голодны для памяти. Если по какой-либо причине Apache все еще путается, вам, возможно, просто придется изящно перезапустить apache, и он должен решить себя, но в 99% случаев, когда monit наблюдает за вашими дворнягами, это должно избежать этого снова. Другой вариант-заглянуть в Phusion Passenger.
сначала проверьте, прослушивает ли порт 8080 следующую команду
netstat -tlpn
Если нет, то перезапустите сервер jenkins следующей командой
sudo /etc/init.d/jenkins start
Он должен работать сейчас. Надеюсь, это поможет.
кулак, вы должны установить selinux
: (SELinux означает защищенный 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.
Final, перезапустить apache!
чтобы заставить это работать, мне нужно было повернуть SELinux, а затем добавить конечные косые черты в строки "localhost:8000".
вот код для отключения SELinux:
echo 0 >/selinux/enforce