Вопрос или проблема
Я уже прочитал все подобные темы, но не смог решить проблему, поэтому опубликовал сюда:
Я могу успешно запустить PHP файл в терминале SSH:
root@skins:~/public1# php8.3 /root/public1/public/index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url="http://:/requirement#"" />
<title>Перенаправление на http://:/requirement#</title>
</head>
<body>
Перенаправление на <a href="http://:/requirement#">http://:/requirement#</a>.
</body>
Тем не менее, я не могу запустить тот же файл в браузере, и получаю ошибку Nginx “Файл не найден”.
Вот мой конфигурационный файл Nginx site.conf:
server {
listen 80;
listen [::]:80;
server_name some.domain.com;
root /root/public1/public; ##<----ЭТО ФАКТИЧЕСКИЙ ПУТЬ
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index 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:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
В журнале ошибок Nginx у меня следующее:
2024/12/25 13:55:05 [crit] 74930#74930: *5 stat() "/root/public1/public/" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [crit] 74930#74930: *5 stat() "/root/public1/public/" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [crit] 74930#74930: *5 realpath() "/root/public1/public" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", host: "some.domain.com"
2024/12/25 13:55:05 [error] 74930#74930: *5 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 88.198.213.143, server: some.domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock:", host: "some.domain.com"
2024/12/25 13:55:05 [error] 74930#74930: *5 open() "/root/public1/public/favicon.ico" failed (13: Permission denied), client: 88.198.213.143, server: some.domain.com, request: "GET /favicon.ico HTTP/1.1", host: "some.domain.com", referrer: "http://some.domain.com/"
Может кто-то помочь, что не так с моей конфигурацией Nginx?
Ответ или решение
Ошибка "File not found" в Nginx: Пошаговое руководство по устранению
В данной ситуации вы столкнулись с проблемой, когда Nginx не может найти файл, несмотря на то, что вы успешно запускаете его через SSH. Давайте разберем возможные причины и решения этой проблемы, основываясь на предоставленной вами конфигурации Nginx и логах ошибок.
1. Проблемы с правами доступа
Согласно логам ошибок Nginx, основная причина, по которой вы получаете ошибку "permission denied", связана с недостаточными правами доступа к вашему каталогу, указанному в директиве root
.
2024/12/25 13:55:05 [crit] 74930#74930: *5 stat() "/root/public1/public/" failed (13: Permission denied)
Решение
-
Проверка прав каталога:
Убедитесь, что у Nginx есть доступ к директории, в которой находится ваш сайт. Обычно Nginx работает от пользователяwww-data
(илиnginx
в некоторых дистрибутивах), который не имеет прав доступа к каталогу/root
.Чтобы изменить каталог на более подходящий, например,
/var/www/public1
, выполните следующие команды:mkdir -p /var/www/public1 cp -r /root/public1/public/* /var/www/public1/ chown -R www-data:www-data /var/www/public1
-
Измените конфигурацию Nginx:
Измените строкуroot
в вашем конфигурационном файле, чтобы указывать на новую директорию:root /var/www/public1;
2. Проблемы с конфигурацией PHP-FPM
Ваши логи ошибок также показывают проблемы с передачей скриптов в обработчик FastCGI:
2024/12/25 13:55:05 [error] 74930#74930: *5 FastCGI sent in stderr: "Primary script unknown"
Решение
-
Проверка
SCRIPT_FILENAME
:
Убедитесь, что переменнаяSCRIPT_FILENAME
правильно указывает на путь к вашему PHP-скрипту. Вы можете изменить строку:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
где
$document_root
уже установлен в ваше основное корневое значение. -
Перезапуск сервисов: После внесения изменений не забудьте перезапустить Nginx и PHP-FPM:
systemctl restart nginx systemctl restart php8.3-fpm
3. Проверка конфигурации Nginx и логов
После внесения изменений важно проверить конфигурацию Nginx на наличие ошибок перед перезапуском:
nginx -t
Это позволит вам убедиться, что конфигурационные файлы верны.
Заключение
После выполнения всех вышеописанных действий, попробуйте снова получить доступ к вашему PHP-скрипту через браузер. Если вы все сделали правильно, ошибка "File not found" должна исчезнуть, и ваш сайт должен загружаться корректно.
Если после этих шагов проблема все еще сохраняется, рекомендуется проверить другие возможные причины, такие как конфликты с другими конфигурациями или дополнительно запустить анализ логов для выявления других возможных причин проблем.
Надеюсь, данное руководство поможет вам успешно устранить ошибку и настроить Nginx так, чтобы он работал без сбоев.