Я работаю над системой Django с бэкэндом Mongo, впервые экспериментирую с этой настройкой. Он имеет довольно стандартную настройку сервера nginx-hands-off-to-Apache для python. Кажется, что все это работает для более стандартного приложения Django-MySQL на том же сервере.django работает через оболочку, но через браузер получает 504
Для моего приложения Django-Монго, когда я использую 'питона manage.py оболочки', я получаю:
from django.test.client import Client
client = Client()
response = client.get('/')
response.status_code
200
response.content
'<html>\n <head>\n <link href="/static/blog.css" rel="stylesheet" type="text/css">\n <title>Worldmaker</title>\n </head>\n <body>\n <ul>\n <li><a href="sourcedoc/create/">New Sourcedoc</a></li>\n <li><a href="sourcedoc/list/">All Sourcedocs</a></li>\n <li><a href="noun/create/">New Noun</a></li>\n <li><a href="noun/list/">All Nouns</a></li>\n </ul>\n <h1>Worldmaker</h1>\n \n\n </body>\n</html>\n\n'
Однако, когда я просматриваю к http://www.mydomain.com/gogoworld/, я получаю Nginx 504 страницы:
504 Шлюз Тайм-аут Nginx/1.4.1
Мой/и т.д./Nginx/сайты с поддержкой/ВХост включает в себя следующее:
location /gogoworld/ {
proxy_pass http://127.0.0.1:84;
include /etc/nginx/proxy.conf;
}
Мой /etc/apache2/httpd.conf включает в себя следующее:
<Directory "/home/rosshartshorn/htdocs/gogoworld">
WSGIScriptAlias /gogoworld /home/rosshartshorn/htdocs/gogoworld/wsgi.py
WSGIPythonPath /home/rosshartshorn/htdocs/ordinarymysqlapp:/home/rosshartshorn/htdocs/worldmaker:/home/rosshartshorn/htdocs/gogoworld
Мой urls.py
from django.conf.urls import patterns, include, url
from sourcedocs import views
urlpatterns = patterns('',
url(r'^$', views.index),
)
Моя путаница является то, что разница между использованием django.text.client , и pinging сайт с моим веб-браузером. Я думал, что это одно и то же, но так как один возвращает ответ, а другой - нет, я явно ошибаюсь. Является ли разница только на уровне apache и/или nginx, или есть части оборудования django, которые также различны? Любые идеи о том, где искать, почему это работает в оболочке django, но не через браузер?
Edit: вот что в моих сайтах Недоступные/rosshartshorn:
Listen 84
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
<VirtualHost *:84>
ServerName www.rosshartshorn.net
ServerAlias rosshartshorn.net
DocumentRoot /home/rosshartshorn/htdocs
<Directory /home/rosshartshorn/htdocs>
AllowOverride All
allow from all
</Directory>
</VirtualHost>
Тестирование с помощью 'django.test.client' аналогично тестированию с помощью встроенного веб-сервера Django (с помощью' manage.py runningerver'). В настоящий момент вы используете стек nginx-apache-django реального мира, поэтому я думаю, что проблема лежит где-то в конфигурации между nginx и apache. Не могли бы вы описать свой стек более подробно? Что-то вроде: browser => nginx => Apache => Django? –
Да, nginx отправляется в Apache для подпапки, в которой находится это приложение (а также для приложения Django-mysql, которое работает, поэтому я считаю, что это правильно). Затем Apache должен отдать Django, и снова он подходит для более старого приложения. Nginx имеет порт 80 и отправляет в порт 84, который предназначен для Apache. Я полагаю, что более раннее приложение было написано под Django 1.3, а новое - в Django 1.5, поэтому их структуры каталогов немного отличаются из-за изменений в Django, но похоже, что мы даже не дошли до этого. – rossdavidh
Поскольку 504 означает, что ваш запрос никогда не доходит до серверного сервера, имеет смысл сначала протестировать django и apache. Не могли бы вы немного переустановить Apache (если необходимо), чтобы прослушать порт 84 и попробовать сначала 'yourdomain.com: 84'? –