我有一个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才会导致问题。
答案 0 :(得分:0)
server_name
指令后缺少分号。
nginx的错误400通常与配置错误有关,导致传递给应用程序的数据不完整或错误。您的声明强调了这一假设,即在apache下它可以正常工作。
因此,您应该使用高日志级别(--log-level debug
)运行gunicorn并查看Web服务器传递的内容。查看运行apache和nginx之间的请求差异。这应该可以帮助您找到错误的原因,这本身就是非常通用的。