Назад | Перейти на главную страницу

nginx: try_files не находит статические файлы, возвращается к PHP

Соответствующая конфигурация:

location /myapp {
    root /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

У меня абсолютно есть файл foo.html в /home/me/myapp/www но когда я просматриваю /myapp/foo.html это обрабатывается PHP, последний резерв в try_files список.

Почему это происходит?

Если вы перейдете к /myapp/foo.html, Nginx проверяет файл на /home/me/myapp/www/myapp/foo.html. Когда он не находит его там, он переходит к резервному копированию в try_files список.

Если вам нужен Nginx для проверки файла по адресу /home/me/myapp/www/foo.html, тогда вам нужно будет использовать alias вместо того rootв вашем случае использования. Вот решение ...

location /myapp {
    alias /home/me/myapp/www;
    try_files $uri $uri/ /myapp/index.php?url=$uri&$args;

    location ~ \.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include       /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    }
}

Обратите внимание, что есть давняя ошибка который alias и try_files не работают вместе. Также обратите внимание, что использование alias может нарушить другие части вашей конфигурации, например обработку PHP!