为什么当提供长路径时 nginx 不显示 PNG?

为什么当提供长路径时 nginx 不显示 PNG?

我正在使用这个docker镜像:webdevops / php-nginx:latest

我尝试使用 url: 访问图像, http://localhost/cache/gen/image/w4I1QDE94564ZiI6IjJESXRl55MvQ3VycmVDE3kvU2VudGluZWw4SmV3ZWxsZXJBUmVjb21iaW5hdG9yI456c2NhbGUiOjF9XQ/qqb3204ec5/Model.png 但它指向我的 index.php

我尝试将图像放在根文件夹 (/app/public/) 中,这样就可以了。

对我来说,这个 URL 似乎太长了?

我反复检查了三次,确认文件位于该位置 (/app/public/cache/gen/image/..)。确实如此。

我怎样才能通过此 URL 访问 PNG 文件?

(如果可能的话我不想更改文件夹结构,因为它来自数据转储)

我附加了配置文件:

server {
    listen 80 default_server;

    server_name  _ *.vm docker;

    root "/app/public/";
    index index.php;

    client_max_body_size 50m;

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

    access_log   /docker.stdout;
    error_log    /docker.stderr warn;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME     $request_filename;
        fastcgi_read_timeout 600;
    }
}

答案1

这是权限问题。检查日志发现这一行:

2022/08/12 22:44:48 [crit] 67#67: *664 stat() "/app/public/cache/gen/image/w4I1QDE94564ZiI6IjJESXRl55MvQ3VycmVDE3kvU2VudGluZWw4SmV3ZWxsZXJBUmVjb21iaW5hdG9yI456c2NhbGUiOjF9XQ/qqb3204ec5/Model.png" failed (13: Permission denied), client: 172.18.0.2, server: _, request: "GET /cache/gen/image/w4I1QDE94564ZiI6IjJESXRl55MvQ3VycmVDE3kvU2VudGluZWw4SmV3ZWxsZXJBUmVjb21iaW5hdG9yI456c2NhbGUiOjF9XQ/qqb3204ec5/Model.png HTTP/1.1"

这里的关键部分是:failed (13: Permission denied)这意味着 www-data 无法读取文件,因为它们是由其他用户创建的,但我没有注意到......

文件夹位于 0751,因此 www-data 无法读取文件,解决方案是将权限设置为 755

chmod -R 755 /app/

Serverfault 解答器帮我解决了这个问题

相关内容