nginx错误:图像的openat()失败(20:不是目录)

时间:2018-12-04 16:52:18

标签: php api nginx server

我有一个PHP项目,一个REST API。 Nginx配置适用于API,但不适用于上传的图片

图片总是返回404错误

项目从 / public 目录开始,上传目录位于public内部,因此图像访问URL类似于:

DOMAIN.COM/upload/201812/20181204133821.jpg

NGINX的实际配置是

result = [l + l[-1].split('@') for l in list1]

因此,API从 / public 目录开始,并且图像被上传到 / public / upload /

也。服务器上的Nginx错误日志显示:

server {
    listen 80;
    listen [::]:80;

    set $root_path '/usr/share/nginx/html/api/public';
    root $root_path;

    index index.php index.html index.htm;
    server_name api-eduplus.blanco-estudio.com;

    #try_files $uri $uri/ @rewrite;
    try_files $uri $uri/ /index.php?q=$uri&$args;

    location ~* \.(jpg|jpeg|png|gif)$ {
        root $root_path;
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    #error_log logs/error.log warn;
}

请帮助,我实际上被困住了

1 个答案:

答案 0 :(得分:0)

我刚刚在服务器上解决了这个问题。错误的原因是符号链接。

我刚在服务器的nginx配置上遇到了此(不是很清楚)错误消息:

"/path/to/index.html" is not found (20: Not a directory)

经过反复试验,我确定实际原因是nginx无法访问站点的文档根目录,因为到root的路径的一部分包含符号链接,但是我有{{1 }}设置在我的主要disable_symlinks on;文件中。

注释掉nginx.conf行或将其更改为disable_symlinks on;可解决此问题。

另请参阅: