nginx web 服务器中存在的文件收到 404 错误

nginx web 服务器中存在的文件收到 404 错误

我最近将 CentOS 7 计算机上的 Web 服务器从 Apache 切换到了 nginx。我使用软件在我的计算机上截取屏幕截图,并将其上传到服务器供公众查看。最初,它在 Apache 上运行良好 - 然而,现在我遇到了一个问题,nginx 会在 Web 服务器上为我的某些 .png 图像提供 404 错误。

我提到这个问题遇到了非常相似的问题,但是我无法根据我自己的问题找到解决方案。

我有下面图像服务器的服务器块的片段。

server {
    listen       80;
    server_name  imageserver.example.com;
    root         /usr/share/nginx/imageserver.example.com/public_html;

    access_log   imageserver.example.com/logs/imageserver.example.com_access.log;
    error_log    imageserver.example.com/logs/imageserver.example.com_error.log crit;

    location / {
        index  index.html index.htm;
    }

    location ~* \.png {
        root       imageserver.example.com/public_html/u/;
        expires    max;
        add_header Pragma public;
        add_header Cache-control "public, must revalidate, proxy-revalidate";
    }
}

示例链接为这个图片。我已确认该文件在服务器上存在,并且具有以下权限。

$ lsa 7b724394b851299c68b15f1172f158c6.png -rw-rw-r--. 1 jflory nginx 2.4K Nov 3 11:13 7b724394b851299c68b15f1172f158c6.png

我很困惑如何修复这个问题。问题可能出在哪里?

答案1

root容器中的指令在location ~* \.pngURL 末尾添加 /u/,因此服务器在 /u/u/ 中查找图像。

这个root指令实际上是不必要的,因为该值将从块中定义的值继承server

答案2

图像文件位于根目录中,而不是 /u/

删除链接中的 /u 您将看到图像加载。

答案3

不过,我很好奇,/u/ 难道不是图像的根目录吗?因为所有图像都存储在 /u/ 中?我不知道我是否完全理解为什么这样可以修复这个问题。

您只需提供public_html目录路径。请参阅以下示例以了解。

文件结构:

.../public_html/

-- /u/myimg.jpg

-- /index.html

显示图像的代码index.html

<img src="/u/myimg.jpg">

因此,如果您将其设置.../public_html/u/为图像服务器路径,则服务器将尝试查找.../public_html/u/u/myimg.jpg,因此将抛出 404 错误。希望这有帮助 :)

答案4

此外,如果您需要与u部分完全链接(如http://i.j-f.co/u/image.png),您可以uroot指令中删除(不是来自链接):

location ~* \.png {
        root       imageserver.example.com/public_html/;
        ...
}

相关内容