某些路线上有400错误(Django + gunicorn + nginx)

时间:2014-11-23 04:54:10

标签: django nginx gunicorn

我有一个django网站,我正在尝试使用gunicorn和nginx进行部署。除了带连字符的路线外,所有路线都能正常工作。这些返回400错误。

我将debug设置为True,因此这不是我一直在阅读的allowed_hosts问题。我的正则表达式也不是问题。该网站在Apache上运行。

这是我的nginx配置:

server {
    listen 80 default;
    client_max_body_size 4G;
    server_name mydomain.local

    keepalive_timeout 5;

    location / {
        try_files $uri @proxy_to_app;
    }

location /static/ {
   alias /path/to/project/static/;
}

location /uploads/ {
   alias /path/to/project/uploads/;
}

location @proxy_to_app {
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $http_host;
   proxy_redirect off;
   proxy_pass   http://127.0.0.1:8002;
}

}

这是我的urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
import settings

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'Portfolio.views.get_home', name='home'),
    url(r'^contact/$', 'Portfolio.views.get_contact', name='contact'),
    url(r'^grappelli/', include('grappelli.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^(?P<slug>[\w-]+)/$', 'Portfolio.views.get_gallery', name='gallery')
)

正如我所说,只有含有连字符的slu will才会导致问题。

1 个答案:

答案 0 :(得分:0)

server_name指令后缺少分号。

nginx的错误400通常与配置错误有关,导致传递给应用程序的数据不完整或错误。您的声明强调了这一假设,即在apache下它可以正常工作。

因此,您应该使用高日志级别(--log-level debug)运行gunicorn并查看Web服务器传递的内容。查看运行apache和nginx之间的请求差异。这应该可以帮助您找到错误的原因,这本身就是非常通用的。