![为什么当提供长路径时 nginx 不显示 PNG?](https://linux22.com/image/779414/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E6%8F%90%E4%BE%9B%E9%95%BF%E8%B7%AF%E5%BE%84%E6%97%B6%20nginx%20%E4%B8%8D%E6%98%BE%E7%A4%BA%20PNG%EF%BC%9F.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/