Вопрос или проблема
Я использую Debian 9 с nginx 12 и php7.1
Я всё настроил.
Nginx не выдаёт ничего в журнал ошибок, все PHP-скрипты работают на 100%. Nginx индексирует index.html как индекс, но НЕ находит index.php и возвращает 404, хотя я это настроил в конфигурации nginx.
Вот моя конфигурация nginx:
server {
listen 80 default_server;
listen [::]:80 default_server;
# Конфигурация SSL
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Примечание: вы должны отключить gzip для SSL-трафика.
# См.: https://bugs.debian.org/773332
#
# Ознакомьтесь с ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
# См.: https://bugs.debian.org/765782
#
# Самоподписанные сертификаты, сгенерированные пакетом ssl-cert
# Не используйте их на производственном сервере!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Добавьте index.php в список, если вы используете PHP
index index.php index.html index.htm;
server_name _;
server_tokens off;
location / {
# Сначала попытка обслужить запрос как файл, затем
# как каталог, затем вернуться к отображению 404.
try_files $uri /index.html index.php;
}
# передачи PHP скриптов на сервер FastCGI
#
location ~ \.php$ {
# С php-fpm (или другие unix-сокеты):
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
}
# запрет доступа к .htaccess файлам, если корень документа Apache
# совпадает с nginx
#
#location ~ /\.ht {
# deny all;
#}}
Всё хорошо, я разобрался 🙂
Это была ошибка в моей конфигурации:
location / {
# Сначала попытка обслужить запрос как файл, затем
# как каталог, затем вернуться к отображению 404.
try_files $uri /index.html index.php;
}
Ответ или решение
Проблема с ошибкой 404, возникающая при попытке доступа к файлу index.php
на сервере с Nginx и PHP, часто вызывает затруднения у администраторов. В вашем случае, вы работали с конфигурацией Nginx на Debian 9 с PHP 7.1 и столкнулись с тем, что Nginx не смог найти файл index.php
, хотя все PHP-скрипты функционировали корректно. Давайте рассмотрим, в чем могла заключаться ошибка и как её решить.
Анализ конфигурации Nginx
Ваша конфигурация сервера включает следующие ключевые элементы:
-
Параметры root и index:
root /var/www/html; index index.php index.html index.htm;
Эти строки означают, что корневой каталог вашего веб-приложения установлен на
/var/www/html
, а в качестве индексных файлов указаныindex.php
,index.html
иindex.htm
. -
Location блок для корневого адреса:
location / { try_files $uri /index.html index.php; }
Эта часть вашей конфигурации отвечает за обработку запросов к корню вашего сайта. При этом
try_files
пытается сначала предоставить запрашиваемый URI, затем обращается к файлуindex.html
, а затем — кindex.php
.
Проблема в конфигурации
Вы нашли ошибку в данной конфигурации, и это, безусловно, решило вашу проблему. Важно отметить, что порядок следования в директиве try_files
имеет большое значение.
Когда запрос к файлу index.php
вызывает 404, это может происходить из-за того, что сервер не может найти файл в первой попытке, и, таким образом, он переходит к следующему уровню, в данном случае к index.html
, вместо того чтобы обратиться к index.php
. Порядок на самом деле следовал бы такой:
location / {
try_files $uri $uri/ /index.php;
}
Таким образом, это говорит системе сначала проверять существование URI, затем проверять наличие папки с таким именем, и, если ничего не найдено, обращаться к index.php
.
Предложение по улучшению
Для более корректной работы вашего сервера вы также могли бы добавить блок location
для обработки запросов к index.php
, как это сделано в вашем случае:
location ~ \.php$ {
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
}
Убедитесь, что ваша конфигурация FastCGI настроена правильно, а путь к сокету соответствует реальному расположению вашего PHP-FPM.
Заключение
Теперь после исправления вашей конфигурации Nginx приложения должны корректно обрабатывать запросы к index.php
, и ошибка 404 не будет более возникать. Не забывайте проверять логи сервера для получения дополнительной информации при возникновении проблем, и всегда устанавливайте порядок в правах доступа и конфигурациях, чтобы избежать путаницы.
Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.