【问题标题】:Django and Nginx try_files 403 for site root page站点根页面的 Django 和 Nginx try_files 403
【发布时间】:2010-11-25 10:54:57
【问题描述】:

我对域使用这样的 Nginx 配置:

server_name_in_redirect off; 
listen 80;
server_name  ~^(www\.)?(.+)$;
root /var/www/$2/htdocs;

location / {
    try_files  $uri  $uri/ $uri/index.htm  @django;
    index index.html index.htm;
}

location @django {
    fastcgi_pass 127.0.0.1:8801;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param SERVER_NAME $server_name;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_pass_header Authorization;
    fastcgi_intercept_errors off;
    fastcgi_param REMOTE_ADDR $remote_addr;
}

Django URL 配置:

urlpatterns = patterns('',   
    url(r'^$', home, name='home'),
    url(r'index.htm', home, name='home'),    
    url(r'^(?P<name>.*).htm$', plain_page, name="plain_page"),
}

像http://domain.com/somepage.htm 这样的所有网址都可以正常工作,除了http://domain.com/ 它总是由 Nginx 显示 403。

如果您将静态 index.htm 文件添加到站点根目录 - 它是由于 try_files 指令而打开的

如果你没有静态index.htm,但是调用http://domain.com/index.htm页面是django打开的

如果你没有静态 index.htm 并打开 http://domain.com/ 你没有页面,但按想法 index.htm 应该被查看并作为 try_files 链中的最后一个传递给 django。

在这种情况下如何使http://domain.com/ 工作(应该调用django 的index.htm)?

【问题讨论】:

    标签: django nginx django-urls


    【解决方案1】:

    添加这个

    location = / { rewrite ^(.*)$ /index.htm last; }

    在root 行下方,在进一步处理之前重写 URI。

    PS。自您提出要求以来,您可能已经在这一年中解决了这个问题,但这里是供其他人查看的。

    【讨论】:

    • 谢谢。据我所知,我以某种方式解决了它,使用了不同的方法。
    【解决方案2】:

    一个更好的解决方案是你在你的 urls.py 中提供一个 / url 是删除

     root /var/www/$2/htdocs;
    

    然后只在您提供静态资产的 location {} 块中包含根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2016-06-08
      相关资源
      最近更新 更多