views:

444

answers:

1

I use such Nginx configuration for the domain:

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

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

all urls like http://domain.com/somepage.htm works good, except http://domain.com/ it always shows 403 by Nginx.

if you add static index.htm file to the site root - it's opened because of try_files directive

if you have no static index.htm, but call http://domain.com/index.htm page is opened by django

buf it you have no static index.htm and open http://domain.com/ you get no page, but by idea index.htm should be looked and passed to the django as the last in the try_files chain.

how to make http://domain.com/ work (should call django's index.htm) in this case?

A: 

Add this

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

underneath the root line to do a rewrite of the URI before further processing.

PS. You have probably sorted this out during the year since your asked, but here it is for other to see.

Kalle
Thanks. I solved it in some way, used different approach as far as I remember.