【发布时间】:2013-07-21 12:30:45
【问题描述】:
我正在开发一个带有 Mongo 后端的 Django 系统,这是我第一次尝试这种设置。它有一个相当标准的 nginx-hands-off-to-Apache-for-python 服务器设置。这一切似乎都适用于同一服务器上更标准的 Django-MySQL 应用程序。
对于我的 Django-Mongo 应用程序,当我使用“python manage.py shell”时,我得到:
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/sites-enabled/vhost 包括:
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 内置网络服务器(manage.py runserver)进行测试类似。目前您正在使用“真实世界”堆栈 nginx-apache-django,所以我想问题出在 nginx 和 apache 之间的配置中。你能更详细地描述你的堆栈吗?类似于:浏览器 => nginx => Apache => Django? -
是的,nginx 将这个应用程序所在的子文件夹交给 Apache(还有一个 Django-mysql 应用程序,它可以工作,所以我认为这是正确的)。然后 Apache 应该移交给 Django,并再次为较旧的应用程序移交。 Nginx 有 80 端口,发送到 84 端口,用于 Apache。我相信旧的应用程序是在 Django 1.3 下编写的,而新的应用程序是在 Django 1.5 下编写的,因此它们的目录结构由于 Django 的变化而略有不同,但似乎我们甚至没有达到这一点。
-
由于 504 意味着您的请求永远不会到达后端服务器,因此首先单独测试 django 和 apache 是有意义的。您能否尝试重新配置 Apache(如果需要)以侦听端口 84 并先尝试
yourdomain.com:84? -
感谢您的帮助,Hieu,这些都是很好的建议。当我直接浏览到端口 84 时,我没有得到 504 页面,但它只是永远旋转。因此,似乎 nginx 不是问题的一部分,它只是报告 Apache 没有返回任何内容的事实。因此,我猜这意味着它不是django,也不是nginx,所以它一定是Apache?
-
是的 apache 配置已关闭或类似的东西,我不太擅长配置 apache 和 django(我所有的网站都是 django+nginx)所以我不太了解细节。跨度>
标签: django apache mongodb nginx