我正在研究一個帶有Mongo後端的Django系統,我第一次嘗試了這個設置。它有一個相當標準的nginx-hands-off-to-Apache-for-python服務器設置。這一切似乎都適用於同一臺服務器上更標準的Django-MySQL應用程序。django通過shell但通過瀏覽器獲得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
我的/ etc/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之間是什麼,並用我的網頁瀏覽器ping站點。我原以爲這是同樣的事情,但是因爲一個人回覆而另一個沒有迴應,我顯然是不正確的。僅在apache和/或nginx級別有所不同,還是django機器的不同部分有所不同?有什麼想法看看爲什麼在django shell中工作,但不通過瀏覽器?
編輯:這裏是什麼在我的網站可用/ 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內置webserver(通過'manage.py runserver')測試類似。 目前,您正在使用「真實世界」堆棧nginx-apache-django,所以我想問題在於nginx和apache之間的配置。你能否更詳細地描述你的堆棧?例如:browser => nginx => Apache => Django? –
是的,nginx將這個應用程序所在的子文件夾交給了Apache(也適用於Django-mysql應用程序,它適用,所以我認爲這是正確的)。然後Apache應該交給Django,並且它也適用於舊版應用程序。 Nginx具有80端口併發送到Apache的端口84。我相信較老的應用程序是在Django 1.3下編寫的,而較新的應用程序是在Django 1.5下編寫的,所以它們的目錄結構由於Django的變化而有所不同,但似乎我們甚至沒有達到這一點。 – rossdavidh
因爲504意味着你的請求永遠不會到達後端服務器,所以首先測試django和apache是很有意義的。你可以嘗試重新配置一下Apache(如果需要的話)來監聽端口84並首先嚐試'yourdomain.com:84'嗎? –