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

Индекс каталогов запрещен на сайтах / default / files - Drupal NGINX

Мы заметили эту ошибку, когда пользователи заполняли формы на нашем сайте Drupal, прикрепляли изображение и сохраняли его. Чтобы определить основную причину (я ожидал, что это проблема владения или разрешения на каталог). Я воссоздал точную структуру папок на своем ноутбуке. Развернул сайт и попытался отправить форму. Была такая же проблема. Журналы ошибок содержат следующие записи

2016/06/29 21:29:28 [error] 9419#0: *13 directory index of "/home/sridhar/public_html/pg4me/public/sites/default/files/" is forbidden, client: 127.0.0.1, server: pg4me, request: "GET /sites/default/files/ HTTP/1.1", host: "pg4me", referrer: "http://pg4me/newproperty"

Я проверил права собственности и разрешения на структуру каталогов

namei -l /home/sridhar/public_html/pg4me/public/sites/all/modules/
f: /home/sridhar/public_html/pg4me/public/sites/default/files
drwxr-xr-x root    root    /
drwxr-xr-x root    root    home
drwxrwxr-x sridhar sridhar sridhar
drwxrwxr-x sridhar sridhar public_html
drwxr-xr-x sridhar sridhar pg4me
drwxr-xr-x sridhar sridhar public
drwxr-xr-x sridhar sridhar sites
drwxr-xr-x sridhar sridhar default
drwxrwxrwx sridhar sridhar files

Все вышестоящие каталоги имеют разрешения на выполнение, а каталог файлов имеет права на чтение, запись и выполнение (хотя не очень безопасно, пришлось предоставить 777, чтобы проверить, работает ли он). NGINX работает как www-data.

Моя конфигурация vhost в / etc / nginx / sites-available имеет следующие записи

server {
    listen pg4me;
    server_name pg4me;

    root /home/sridhar/public_html/pg4me/public;
    index index.php index.html index.htm;

    keepalive_timeout 70;
    access_log /home/sridhar/public_html/pg4me/log/access.log;
    error_log /home/sridhar/public_html/pg4me/log/error.log;


    # Make site accessible from http://localhost/

    location / {
            try_files $uri $uri/ @rewrite;
            expires max;
    }

    location @rewrite {
            rewrite ^ /index.php;
    }

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
    location ~ /\.ht {
            deny all;
    }

}

Поскольку сообщение об ошибке указывало на ошибку списка каталогов, я включил следующее в свою конфигурацию vhost nginx

location /home/sridhar/public_html/pg4me/public/sites/default/files/ {
            autoindex on;

}

Но это не подействовало. Придя в себя, я попробовал трассировку стека

root@sridhar-Aspire-5745:/home/sridhar/public_html# strace -p 9419 -p 9420 -p 9421 -p 9422 -e trace=file -f 
Process 9419 attached
Process 9420 attached
Process 9421 attached
Process 9422 attached
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/newproperty", 0xbfc6c110) = -1 ENOENT (No such file or directory)
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/newproperty", 0xbfc6c110) = -1 ENOENT (No such file or directory)
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files/", {st_mode=S_IFDIR|0777, st_size=69632, ...}) = 0
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files/", {st_mode=S_IFDIR|0777, st_size=69632, ...}) = 0
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files/index.php", 0xbfc6c090) = -1 ENOENT (No such file or directory)
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files", {st_mode=S_IFDIR|0777, st_size=69632, ...}) = 0
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files/index.html", 0xbfc6c090) = -1 ENOENT (No such file or directory)
[pid  9419] stat64("/home/sridhar/public_html/pg4me/public/sites/default/files/index.htm", 0xbfc6c090) = -1 ENOENT (No such file or directory)

Я понятия не имею, почему NGINX ищет index.php на сайтах / default / files /. Я проверил код своего модуля и не смог найти никаких ссылок на индексные файлы в каталоге sites / default / files.

Интересно, что могло быть причиной такого довольно странного поведения