我认为 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;
}
}
因此,我希望打开 /url 上的文件 (A) 和 /wiki url 上的文件 (B)。
但是我在 /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
如果你有任何想法...
编辑:
我尝试了以下配置:
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”,主机:“...”
答案1
Nginx 正在查找目录,但找不到索引文件,并且未配置为生成目录列表,因此返回错误。您可能想要使用try_files
指向你的index.php
:
location /wiki {
..
try_files $uri $uri/ $uri/index.php?$args;
}
答案2
这听起来像是directory index
列表问题而不是权限问题。您是否尝试过直接访问文件而不是根文件夹?这个错误是有道理的,因为您的 wiki 没有指令index
来说明要将哪个文件加载为索引文件。如果您希望路径列出所有文件,您可以使用该autoindex
指令。请参阅http://nginxlibrary.com/enable-directory-listing/是一个很好的例子。