3 Stimmen

Django und Nginx try_files 403 für Site Root Seite

Ich verwende eine solche Nginx-Konfiguration für die Domäne:

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-Konfiguration:

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

alle Urls wie http://domain.com/somepage.htm funktioniert gut, außer http://domain.com/ wird von Nginx immer 403 angezeigt.

wenn Sie die statische index.htm-Datei zum Site Root hinzufügen - sie wird aufgrund der try_files-Direktive geöffnet

wenn Sie keine statische index.htm haben, sondern die http://domain.com/index.htm Seite wird von django geöffnet

buf es Sie keine statische index.htm haben und öffnen http://domain.com/ du bekommst keine Seite, aber durch die Idee index.htm sollte gesucht und als letztes in der try_files-Kette an django übergeben werden.

wie man es macht http://domain.com/ funktionieren (sollte die index.htm von Django aufrufen)?

5voto

Kalle Punkte 258

Dies hinzufügen

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

unter dem root Zeile, um eine umschreiben. des URIs vor der weiteren Verarbeitung.

PS. Wahrscheinlich haben Sie das im Laufe des Jahres, seit Sie gefragt haben, geklärt, aber hier ist es für andere zu sehen.

0 Stimmen

Danke. Ich habe das Problem auf irgendeine Weise gelöst, soweit ich mich erinnere, mit einem anderen Ansatz.

1voto

Mike Punkte 7075

Eine bessere Lösung ist, dass Sie eine / url in Ihrer urls.py bereitstellen und die

 root /var/www/$2/htdocs;

Fügen Sie den Root dann nur in Ortsblöcken {} ein, in denen Sie statische Elemente bereitstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X