Недавно я переключил веб-сервер на моем компьютере с 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 в своей ссылке, и вы увидите, что изображение загружается.