Получение 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 Я понимаю решение в контексте моей собственной проблемы.

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

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 Я понимаю решение в контексте моей собственной проблемы.

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

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 3 ноя, 11:13 7b724394b851299c68b15f1172f158c6.png

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

3
задан 13 April 2017 в 15:14
3 ответа

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

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

3
ответ дан 3 December 2019 в 05:12

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

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

2
ответ дан 3 December 2019 в 05:12

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

2
ответ дан 3 December 2019 в 05:12

Теги

Похожие вопросы