Подтвердить что ты не робот

Почему я получаю ошибку Apache Proxy 503?

Мой сервер отлично справлялся до вчерашнего дня. Он работал 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)
4b9b3361

Ответ 1

Чтобы заставить это работать, мне нужно было свернуть SELinux, а затем добавить косые черты в строки "localhost: 8000".

Здесь код для отключения SELinux:

echo 0 >/selinux/enforce

Ответ 2

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

Ответ 3

Выполнить следующую команду

# /usr/sbin/setsebool httpd_can_network_connect 1

ИЛИ

# /usr/sbin/setsebool httpd_can_network_connect true

и после этого перезапустите httpd

# service httpd restart

Ответ 4

Вы уверены, что они перезапускаются в правильном порядке? У меня были странные проблемы, когда 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>

Возможно, это не очень хорошее решение, но зло ушло.

Ответ 5

Попробуйте запустить monit, чтобы контролировать ваших mogrels за Apache, и таким образом он может перезапустить mongrels для вас, если они умрут или слишком голодны для памяти. Если по какой-либо причине Apache все еще запутывается, вам просто нужно изящно перезапустить apache, и он должен решить себя, но в 99% случаев, когда monit смотреть над вашими ублюдками, следует избегать этого снова. Другой вариант - посмотреть на Phusion Passenger.

Ответ 6

Сначала проверьте, прослушивает ли порт 8080 или нет, следующей командой

netstat -tlpn

Если не перезапустить сервер jenkins с помощью следующей команды

sudo /etc/init.d/jenkins start

Теперь он должен работать. Надеюсь, что это поможет.

Ответ 7

Кулак, вы должны установить 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!