Использование Apache для обслуживания проекта Django на RHEL (ошибка 503)

Я новичок во всем веб-сайте... Был бы очень признателен, если бы вы могли помочь здесь...

Я хочу разместить проект Django на удаленном сервере (красная шляпа, выпуск CentOS 6.5).

Я тестировал проект на удаленном сервере, используя сервер разработки и порт 8000:

  python manage.py runserver *.*.*.*:8000 --insecure

В этом случае веб-сайт работает нормально и доступен с других компьютеров.

   0 errors found
   September 04, 2014 - 08:13:03
   Django version 1.6.4, using settings 'mysite.settings'
   Starting development server at http://*.*.*.*:8000/
   Quit the server with CONTROL-C.

Теперь я хочу запустить его в производство, и я решил использовать http-сервер Apache и mod_wsgi. У меня установлены и активированы httpd и wsgi. Я изменил файл конфигурации httpd.conf на:

   Listen *:80 (I've also tried Listen *:8000 and Listen (IP address):8000)

   #DocumentRoot "/var/www/html"
   DocumentRoot "/testsite"      (I put a plan html file under the directory just for test)

   ServerName <here is the url of the site,with no port number>

Однако, когда я пытаюсь открыть веб-страницу, у меня всегда возникает ошибка 503:

   Service Temporarily Unavailable

   The server is temporarily unable to service your request due to maintenance downtime 
   or capacity problems. Please try again later.

   Apache/2.2.3 (CentOS) Server at <site url> Port 80

Я попробовал пару вещей (1) проверил, что использует порт 80:

  ~# sudo lsof -i :80
  COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
  httpd   28732   root    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28734 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28735 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28736 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28737 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28738 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28739 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28740 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  httpd   28741 apache    4u  IPv6 19802111      0t0  TCP *:http (LISTEN)
  ~# service httpd status
  httpd (pid  28732) is running...

(2) перезапустите сервер apache:

  service httpd restart
    Stopping httpd:                                            [  OK  ]
    Starting httpd:                                            [  OK  ]

(3) поместил простой .html в /var/www/html/testsite, каталог DocumentRoot для тестирования.

(4) Я пытался запустить django на другом порту (например, 8008, 8001 и 80)

   e.g. python manage.py runserver *.*.*.*:8008 --insecure
   0 errors found
   September 04, 2014 - 07:56:18
   Django version 1.6.4, using settings 'mysite.settings'
   Starting development server at http://*.*.*.*:8008/
   Quit the server with CONTROL-C.

Как показано выше, в терминале все работает, но я даже не могу получить доступ к веб-сайту с удаленных компьютеров, даже используя сервер разработки. Я пробовал разные номера портов, но можно использовать только порт 8000. Но почему я могу открыть веб-страницу на локальном хосте, когда я меняю номер порта? например 127.0.0.1:8008 или 127.0.0.1:8080 будет работать.

Я предполагаю, что это может быть настройка брандмауэра, затем я пошел в /etc/sysconfig/iptables, я нашел в веб-разделе там была только одна строка:

   -A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT

Затем я добавил еще одну строку для тестирования:

   -A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT

Затем снова попробовал разработку с портом 8001. Опять же, похоже, что он работает на удаленном сервере, но недоступен с удаленных компьютеров.

Извините, если я сделал это запутанным, и если я спросил что-то действительно глупое. Теперь у меня есть три вопроса, которые я действительно не понимаю. Во-первых, меня очень раздражает ошибка 503. Даже он показывает, что сервер apache работает (перезапуск httpd в порядке), на самом деле ничего не отображается ... Во-вторых, при использовании сервера разработки, почему я могу использовать только порт 8000, но не любой другой? Наконец, в сообщении об ошибке 503 показано, что apache работает на порту 80 даже после того, как я изменил порт прослушивания на 8000 в файле конфигурации, почему это так?

Заранее спасибо за любую помощь!


person Peine    schedule 04.09.2014    source источник


Ответы (1)


Если это ваша единственная конфигурация, я не понимаю, как Apache может знать о том, что ваш Django работает под управлением 8000. Нет никаких признаков того, что вы делаете Apache для подключения или прокси-запросов к работающему экземпляру Django.

Что вам нужно сделать, это

or

Вы можете выбрать любой порт с сервером разработки Django. Вы можете настроить IP-адрес и порт, которые прослушивает сервер разработки, с помощью параметров командной строки.

Вы можете заставить сервер разработки Django прослушивать все IP-адреса, включая общедоступные IP-адреса на сервере, как:

 python manage.py runserver 0.0.0.0:8000 

Также журналы Apache можно прочитать в /var/log/apache (или аналогичном каталоге), поэтому это должно объяснить, почему вы получаете 503.

Я сомневаюсь, что iptables никак не связаны с вашей проблемой, но почему-то сервер разработки Django не прослушивает общедоступный IP-адрес. Вы можете легко попробовать это, отключив брандмауэр iptables на сервере.

person Mikko Ohtamaa    schedule 04.09.2014
comment
Механизмы mod_wsgi и FASTCGI полностью независимы. Вам не нужно настраивать оба и следует выбрать только один. FASTCGI является наименее предпочтительным вариантом, а mod_wsgi обычно является лучшим выбором. Сервер разработки не обязательно должен быть запущен. Извините, но нашел ответ запутанным, поэтому решил уточнить. - person Graham Dumpleton; 04.09.2014
comment
@GrahamDumpleton, спасибо! Добавил пропущенное или слово :) - person Mikko Ohtamaa; 04.09.2014