Недавно я переключил веб-сервер на моем компьютере с 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
Я очень не понимаю, как это исправить. В чем может быть проблема?
Директива root
в контейнере ~ * \ .png
добавляет / u / в конец вашего URL-адреса, поэтому сервер ищет изображение в / u / u /.
Эта директива root
на самом деле не нужна, поскольку значение будет унаследовано от значения, определенного в вашем блоке server
.
Файл изображения находится в корневом каталоге, а не в / u /
Удалите / 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. Надеюсь, это поможет :)