Назад | Перейти на главную страницу

Получение 404 для файла, который существует на веб-сервере nginx

Недавно я переключил веб-сервер на моем компьютере с CentOS 7 с Apache на nginx. Я использую программное обеспечение, чтобы делать снимки экрана на своих компьютерах и загружать их на сервер для публичного просмотра. Первоначально он отлично работал на Apache, однако теперь я столкнулся с проблемой, когда nginx будет выдавать ошибку 404 для некоторых моих изображений .png на веб-сервере.

Я сослался на этот вопрос с очень похожей проблемой, но я не мог понять ее решение в контексте моей собственной проблемы.

У меня есть фрагмент серверного блока для сервера изображений ниже.

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

Я очень не понимаю, как это исправить. В чем может быть проблема?

В root директива в location ~* \.png контейнер добавляет / u / в конец вашего URL-адреса, поэтому сервер ищет изображение в / u / u /.

это root директива на самом деле не нужна, так как значение будет унаследовано от значения, определенного в вашем server блок.

Любопытно, но не будет ли / 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. Надеюсь это поможет :)

Файл изображения находится в корневом каталоге, а не в / u /

Удалите / u в своей ссылке, и вы увидите, что изображение загружается.