Try_files

I have a uwsgi_app

I was wondering why

location / {
root /myapp;
index index.html index.wsgi;
try_files $uri $uri/ @wsgi;
}
;

When I visit the domain.com returns a 403 (when I dont have an
index.html file in the root directory);

but if I do Domain.com

The WSGI app is called. This all works.

I am guessing I am doing something wrong.

In my config I have

location @wsgi {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock
}

Hello!

On Thu, May 19, 2011 at 06:10:04PM -0400, David J. wrote:

location @wsgi {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock
}

Please show full config.

Maxim D.

Running Nginx v1.0.0

Here is server config

server {
listen 80;
server_name domain.com www.domain.com;
location /{
index index.html index index.htm index.php;
root /www/domain.com;
try_files $uri $uri/ @wsgi;
}

location @wsgi {
index index.html index.htm;
include uwsgi_params;

uwsgi_pass
unix:/tmp/uwsgi.sock;
}
location
~ .css$ {
root /www/domain.com;
}

}

Hello!

On Fri, May 20, 2011 at 06:57:23AM -0400, David J. wrote:

try_files $uri $uri/ @wsgi;
}

}

It doesn’t looks like you have “index” directive set to
“index.wsgi” nor any actual handling of index.wsgi (except
try_files fallback). This all makes me think that you actually
don’t have index.wsgi on filesystem either.

Note that “index” directive will actually test existence of given
index files on filesystem and will do an internal redirect if one
was found. That is, if you don’t have any index files on
filesystem - you’ll get 403 (unless autoindex module enabled).

The configuration you probably want is something like

root /www/domain.com;

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

location @wsgi {
    uwsgi_pass ...
}

That is: if file exists, return it; if there is a directory with
index.html, return it; else fallback to wsgi.

Maxim D.