首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nginx时,Django总是返回错误404

使用nginx时,Django总是返回错误404
EN

Stack Overflow用户
提问于 2013-03-22 14:19:34
回答 1查看 737关注 0票数 2

我对姜戈有意见。应用程序的url配置如下所示:

代码语言:javascript
复制
urlpatterns = patterns(
    '',
    url(r'^api/', include(api_urls.getUrls())),
    url(r'^api/vk.com/buy.coins/$', VkPaymentsView.as_view()),
    url(r'^api/admin/', include(admin.site.urls)),
    url(r'^api-testing/((?P<method_code>[\w\./-]+?)/)?$', TestingView.as_view()),
)

我尝试请求正确的url:

代码语言:javascript
复制
http://example.com/api-testing/

但是我有一个404错误:

代码语言:javascript
复制
Page not found (404)
Request Method: GET
Request URL:    http://example.com/api-testing//

我看到一个额外的尾部斜杠,这会是问题的原因吗?

使用nginx在FastCGI模式下启动应用程序:

代码语言:javascript
复制
python manage.py runfcgi method=threaded host=localhost port=9001 pidfile=$RUNFILES_PATH/$SITE.pid

这是nginx中的fastcgi参数:

代码语言:javascript
复制
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/$domain/$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param REQUEST_URI $uri;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;

proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

fastcgi_param REDIRECT_STATUS 200;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-22 15:42:40

我找到了解决方案。问题出在FastCGI参数SCRIPT_NAME中。我在Django location指令中添加了fastcgi_param SCRIPT_NAME ''。这个问题已经消失了。

代码语言:javascript
复制
location @django {
    fastcgi_pass localhost:9001;
    fastcgi_read_timeout 600;
    fastcgi_send_timeout 600;
    include fastcgi_params;
    fastcgi_param SCRIPT_NAME '';
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15563952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档