Nginx 位置和根

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

因此,我希望打开 /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/是一个很好的例子。

相关内容