Я думаю, у меня тривиальная проблема с 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/ для хорошего примера.