Nginx的位置和根

我认为我有一个与Nginx的微不足道的问题,但我不能看到它。

我有以下文件树:

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

这是我的configuration:

 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; } } 

所以,我希望打开/ url上的文件(A)和(B)/ wiki上的文件。

但是我在/ wiki上有一个403错误:

 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 

如果你有什么想法…

编辑:

我尝试了以下configuration:

 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的FMP给我一个“文件未find。”

在读取来自上游的响应标题时,客户端:…,服务器:…请求中:“主要脚本未知”在stderr中发送:FastCGI: “GET / wiki / HTTP / 1.1”,上行:“fastcgi://127.0.0.1:9000”,主机:“…”

Nginx正在查找目录,但找不到索引文件,并且未configuration为生成目录列表,因此返回错误。 你可能想使用try_files指向你的index.php

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

这听起来像这是一个directory index列表问题,而不是权限问题。 你有没有尝试直接访问文件,而不是根文件夹? 这个错误是有道理的,因为你的wiki没有index指令来说明哪个文件要加载为索引文件。 如果你想要的path列出所有的文件,你会使用autoindex指令。 见http://nginxlibrary.com/enable-directory-listing/就是一个很好的例子。