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