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

Расположение и корень Nginx

Я думаю, у меня тривиальная проблема с nginx, но я ее не вижу.

У меня есть следующее дерево файлов:

/data/www
> main/
>> html/
>>>...some files (A)

> wiki/
>>...some files (B)

Вот мой конфиг:

server {
    listen       80;
    server_name  troll;

    root /data/www/main/html;

    location = / {
        index index.php;
    }

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/main/html$fastcgi_script_name;
    }

    location /wiki/ {
        root /data/www/wiki;
        rewrite ^/wiki(.*)$ $1 break;
    }

    location ~ ^/wiki/(.*)\.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/wiki/$fastcgi_script_name;
    }
}

Итак, я ожидаю открывать файлы (A) на / urls и (B) файлы на / wiki urls.

Но у меня ошибка 403 на / wiki:

2013/02/12 23:25:06 [error] 30567#0: *58 directory index of "/data/www/wiki/" is forbidden, client: ..., server: ..., request: "GET /wiki/ HTTP/1.1", host: "..."

Даже если у них одинаковые права:

drwxrwx--- 18 apache apache 4096 févr. 10 10:35 /data/www/main/html
drwxrwx---  8 apache apache 4096 déc. 10  2010 /data/www/wiki

и

-rw-r--r-- 1 apache apache 6366 févr.  8 15:10 /data/www/ifaedi/html/index.php
-rw-r--r-- 1 apache apache  185 déc. 10  2010 /data/www/wiki/index.php

Если у вас есть идеи ...

Редактировать:

Я пробовал следующую конфигурацию:

location /wiki/ {
    root /data/www;
    index index.php;
}

location ~ ^/wiki/(.*)\.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name;
}

У меня больше нет 403, но php-fpm выдает сообщение «Файл не найден».

2013/02/13 13:06:55 [ошибка] 3876 # 0: * 5 FastCGI отправлено в stderr: «Основной сценарий неизвестен» при чтении заголовка ответа из восходящего потока, клиент: ..., сервер: ..., запрос: «GET / wiki / HTTP / 1.1», восходящий поток: «fastcgi: //127.0.0.1: 9000», хост: «...»

Nginx находит каталог, но не находит индексный файл и не настроен для генерации списков каталогов, поэтому возвращает ошибку. Вы, вероятно, захотите использовать try_files указать на ваш index.php:

location /wiki {
    ..
    try_files $uri $uri/ $uri/index.php?$args;
}

Похоже, это directory index проблема с листингом, а не с разрешениями. Вы пробовали получить доступ к файлу напрямую, а не к корневой папке? Ошибка имеет смысл, потому что в вашей вики нет index директива, указывающая, какой файл загружать в качестве индексного. Если вы хотите, чтобы путь отображал все файлы, вы бы использовали autoindex директива. Видеть http://nginxlibrary.com/enable-directory-listing/ для хорошего примера.