nginx не отображает фото

Вопрос или проблема

nginx установлен и работает нормально. Но я не получаю никакого ответа (т.е. таймаут) от Firefox на другом компьютере по URL https//johnrose.mywire.org/summer.html. Этот URL имеет сертификат, созданный Certbot, который также модифицировал файл johnrose.mywire.org в /etc/nginx/sites-available/. Когда я дважды нажимаю на файл summer.html на сервере nginx, он отображается нормально в Firefox. У меня открыты все порты nginx (т.е. 80 и 443) (в ufw) на сервере nginx, и маршрутизатор перенаправляет порты 80 и 443 на сервер nginx. Есть ли предложения, как это устранить?
summer.html находится в ‘корневом’ каталоге johnrose.mywire.org:

<!DOCTYPE html>
<html>
<head>
<style>
img {
width: 100%;
height: 100%;
}
</style>
</head>
<body>

<h1><b>Лето с Котом</b></h1>
<br>
<img src="../images/summer.jpg" alt="Лето" width="400" height="300">
<br>
<p><b>Жизнь так трудна</b></p>
<br>

</body>
</html>

summer.jpg находится в каталоге images ‘корневого’ каталога johnrose.mywire.org.

Вот блок сервера johnrose.mywire.org:

# Конфигурация виртуального хоста для johnrose.mywire.org
#
# Вы можете переместить это в другой файл в каталоге sites-available/ и создать символическую ссылку
# на sites-enabled/ для его активации.
#
server {

    server_name johnrose.mywire.org;

    root /home/manager/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
 
    listen [::]:443 ssl ipv6only=on; # управляется Certbot
    listen 443 ssl; # управляется Certbot
    ssl_certificate /etc/letsencrypt/live/johnrose.mywire.org/fullchain.pem; # управляется Certbot
    ssl_certificate_key /etc/letsencrypt/live/johnrose.mywire.org/privkey.pem; # управляется Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # управляется Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # управляется Certbot

}

server {
    if ($host = johnrose.mywire.org) {
        return 301 https://$host$request_uri;
    } # управляется Certbot


    listen 80;
    listen [::]:80;

    server_name johnrose.mywire.org;
    return 404; # управляется Certbot

}

Ответ или решение

Ваша проблема с тем, что Nginx не отображает изображение на странице summer.html, может возникать по нескольким причинам. Давайте рассмотрим все возможные аспекты и пути решения этого вопроса.

1. Структура директорий и доступ к файлам

Согласно вашему описанию, summer.html находится в корневом каталоге, а изображение summer.jpg – в подкаталогах images. Проверьте, правильно ли указаны пути к изображениям в HTML-коде. Ниже приведен ваш текущий код:

<img src="../images/summer.jpg" alt="Summer" width="400" height="300">

Путь "../images/summer.jpg" может не работать так, как вы ожидаете в контексте веб-сервера. Попробуйте изменить это на:

<img src="/images/summer.jpg" alt="Summer" width="400" height="300">

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

2. Конфигурация Nginx

Ваш текущий конфигурационный файл Nginx выглядит правильно, однако целесообразно убедиться, что все пути по-прежнему актуальны. Директория /home/manager/www/html должна содержать как summer.html, так и подкаталог images с summer.jpg. Убедитесь, что файлы находятся на своих местах, поскольку неправильное размещение может вызвать время ожидания или ошибки 404.

3. Брандмауэр и перенаправления

Если вы уже убедились в правильности путей и наличии файлов, следующий шаг – проверить настройки брандмауэра UFW и перенаправление портов на роутере. Убедитесь, что порты 80 и 443 открыты не только для HTTP и HTTPS трафика, но и что нет ограничений для вашего IP. Вы можете использовать следующую команду для проверки статуса UFW:

sudo ufw status

Проверьте, чтобы у вас было указано что-то вроде:

80                         ALLOW       Anywhere
443                        ALLOW       Anywhere

4. Логи Nginx

Никогда не забывайте проверять логи Nginx. Это один из самых мощных инструментов для отладки. Их можно найти в следующем месте:

/var/log/nginx/error.log
/var/log/nginx/access.log

С помощью команд:

tail -f /var/log/nginx/error.log

и

tail -f /var/log/nginx/access.log

вы можете увидеть, происходят ли какие-либо ошибки при попытке загрузить summer.jpg. Если изображения не удается найти, вы получите сообщение об ошибке 404, которое поможет локализовать проблему.

5. SSL-сертификат

Вы упомянули, что Certbot успешно создал сертификат. Убедитесь, что ваш браузер не блокирует загрузку ресурсов из-за проблем с сертификатом. При доступе через https проверьте, отображается ли значок замка в адресной строке Firefox. Если там есть предупреждения, возможно, ваш сертификат отозван или неправильно настроен.

Заключение

Проверьте каждый из указанных выше пунктов. Наиболее вероятная причина проблемы – это неправильно указанное местоположение изображения в HTML-коде, однако также следует проверить конфигурацию Nginx и статус брандмауэра. Если после выполнения всех шагов проблема не решится, следует дополнительно исследовать логи и настройки сетевого оборудования, чтобы исключить блокировку трафика. Удачи в устранении неполадок с вашими веб-ресурсами!

Оцените материал
Добавить комментарий

Капча загружается...