Публичная папка запрещена в nginx

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

Я успешно развертываю свое приложение Laravel на Digital Ocean. Но мои CSS и JS файлы имеют 403 (Запрещено).
В консоли я вижу ошибку:

net::ERR_ABORTED 403 (Forbidden)

Как я могу дать своему приложению разрешение на доступ к CSS– и JS-файлам в моей конфигурации Nginx?

Конфигурация nginx

// конфигурация nginx
server {
    listen 80;
    server_name DOMAIN_NAME_OR_IP_ADDRESS;
    root /var/www/name_of_repo/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ .php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /.(?!well-known).* {
        deny all;
    }
}

Я пробовал sudo chown -R www-data.www-data public, но проблема все еще существует.

В настоящее время сайт загружается без CSS и JS.

Как вы упомянули в вашем комментарии, я думаю, что последний блок location должен выглядеть так:

location ~ /\.(?!well-known).* {
  deny all;
}

Первую точку нужно экранировать, иначе она соответствует любому символу.

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

Решение проблемы с доступом к CSS и JS файлам в Nginx

Ошибка 403 (Forbidden), возникающая при попытке загрузить CSS и JS файлы вашего приложения Laravel, указывает на то, что сервер Nginx отказывается предоставить доступ к этим ресурсам. Давайте разберем возможные причины этой проблемы и предложим решения.

1. Проверьте права доступа к файлам

Несмотря на то что вы уже выполнили команду sudo chown -R www-data:www-data public, важно помнить, что для успешного доступа к файлам также необходимы корректные права доступа. Убедитесь, что директория public и ее содержимое имеют права доступа, позволяющие чтение:

sudo chmod -R 755 /var/www/name_of_repo/public

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

2. Проверьте конфигурацию Nginx

Ваш файл конфигурации Nginx выглядит в целом корректно, но необходимо внести некоторые изменения для улучшения работы с статическими файлами. Убедитесь, что конфигурация включает соответствующий блок для обслуживания CSS и JS файлов. Обычно такие файлы не требуют обработки через PHP, и вам следует добавить явный блок для их обслуживания. Например:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf)$ {
    try_files $uri =404;
    expires 30d;
}

Этот блок позволит Nginx обслуживать запрашиваемые CSS и JS файлы, проверяя их наличие и возвращая ошибку 404 в случае отсутствия.

3. Исправьте блоки location

Обратите внимание на вашу конфигурацию, связанное с:

location ~ /\.(?!well-known).* {
    deny all;
}

Здесь присутствует ошибка в синтаксисе, старая версия может быть воспринята неверно. Попробуйте заменить этот блок на следующий:

location ~ /\. {
    deny all;
}

Эта конфигурация будет запрещать доступ ко всем файлам, начинающимся с точки, кроме тех, которые находятся в папке well-known, если таковая обязательна.

4. Перезапустите Nginx

После внесения изменений в конфигурацию обязательно перезапустите Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Или используйте:

sudo service nginx restart

5. Проверка логов

Если проблема сохраняется, проверьте логи Nginx для выявления причин ошибки. Логи находятся по умолчанию в /var/log/nginx/error.log. Логи могут содержать полезную информацию о том, почему файлы не загружаются.

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

Этот подход даст возможность изучить конкретные ошибки, вызывающие ваши трудности.

6. Убедитесь в отсутствии других проблем

Проверьте, нет ли дополнительных проблем, таких как блокировка файрволлом или специальные настройки безопасности, например, SELinux, которые могут ограничивать доступ к файлам. Можно временно отключить SELinux для тестирования:

sudo setenforce 0

Заключение

Следуя вышеизложенным шагам, вы сможете устранить проблему с ошибкой 403 (Forbidden) при загрузке CSS и JS файлов на вашем Laravel приложении в Nginx. Убедитесь, что права доступа и конфигурация сервера верны, и проверьте логи для более детального анализа проблем.

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

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