Как исправить: PHP файл скачивается, а не выполняется на Nginx

Как исправить: PHP файл скачивается, а не выполняется на Nginx

от автора

в

Если вы когда-либо пытались открыть PHP-страницу на своем веб-сервере, а вместо этого файл начал скачиваться, вы не одиноки. Это довольно распространенная проблема, особенно если вы работаете с Nginx, PHP-FPM или Apache, независимо от версии PHP (5, 7, 8 и выше). В этой статье мы рассмотрим причины этой проблемы и предложим решения.

Основные причины и решения

Неправильная конфигурация Nginx

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

Пример конфигурации Nginx

Начнем с того, что рассмотрим базовую конфигурацию Nginx для работы с PHP-FPM:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Что может пойти не так?

  1. Отсутствие блока location ~ \.php$: Этот блок отвечает за обработку PHP-файлов. Если он отсутствует или неправильно настроен, сервер не знает, что делать с PHP-файлами, и предлагает их скачать.
  2. Неправильный путь к сокету: В строке fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; важно убедиться, что путь к сокету правильный. Ошибка в пути приведет к тому, что Nginx не сможет связаться с PHP-FPM.

Решение

Убедитесь, что блок location ~ \.php$ существует и настроен правильно. Проверьте путь к сокету PHP-FPM и исправьте его, если необходимо.

Проблемы с PHP-FPM

PHP-FPM (FastCGI Process Manager) – это альтернатива стандартному PHP FastCGI, обеспечивающая более высокую производительность. Но если PHP-FPM настроен неправильно, это может привести к тому, что файлы будут скачиваться, а не выполняться.

Проверка статуса PHP-FPM

Вы можете проверить статус PHP-FPM командой:

systemctl status php7.4-fpm

Если служба не запущена или имеет ошибки, это может быть причиной проблемы.

Проблемы с конфигурацией PHP-FPM

Конфигурационный файл PHP-FPM обычно находится по пути /etc/php/7.4/fpm/pool.d/www.conf. Важно убедиться, что настройки корректны:

listen = /var/run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Решение

Убедитесь, что PHP-FPM запущен и работает корректно. Проверьте настройки в файле конфигурации и исправьте их, если необходимо.

Проблемы с Apache

Если вы используете Apache, проблема может быть в конфигурации виртуального хоста или в отсутствии необходимых модулей.

Пример конфигурации Apache

Простая конфигурация виртуального хоста для Apache может выглядеть так:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Что может пойти не так?

  1. Отсутствие модуля proxy_fcgi: Если этот модуль не загружен, Apache не сможет передавать запросы к PHP-FPM.
  2. Неправильный путь к сокету: Как и в случае с Nginx, путь к сокету должен быть правильным.

Решение

Убедитесь, что модуль proxy_fcgi загружен. Для этого выполните команду:

a2enmod proxy_fcgi
systemctl restart apache2

Проверьте путь к сокету PHP-FPM и исправьте его, если необходимо.

Проблемы с версией PHP

Незавиимо то того, используете ли вы PHP 5, PHP 7 или PHP 8, настройки и конфигурации могут отличаться.

Проверка версии PHP

Убедитесь, что версия PHP, установленная на сервере, соответствует той, которую вы настраиваете:

php -v

Если установлено несколько версий PHP, убедитесь, что используется правильная версия.

Настройки конфигурации

Конфигурационные файлы для разных версий PHP могут находиться в разных директориях. Например, для PHP 7.4 конфигурация может находиться в /etc/php/7.4/fpm/php.ini.

Решение

Проверьте, какая версия PHP установлена и используется на сервере. Убедитесь, что конфигурационные файлы настроены правильно и соответствуют версии PHP, которую вы используете.

Общие рекомендации и полезные советы

Логи сервера

Анализ логов сервера может помочь выявить причину проблемы. Проверьте логи Nginx или Apache для выявлнеия ошибок:

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

Проверка конфигурации

Убедитесь, что конфигурационные файлы веб-сервера и PHP-FPM корректны и не содержат синтаксических ошибок. Для проверки конфигурации Nginx используйте команду:

nginx -t

Для проверки конфигурации Apache используйте команду:

apachectl configtest

Проверка прав доступа

Убедитесь, что PHP-файлы и директории имеют правильные права доступа. Например:

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

Тестирование с простым PHP-файлом

Создайте простой PHP-файл для проверки конфигурации:

<?php
phpinfo();
?>

Поместите этот файл в корневую директорию вашего веб-сервера и откройте его в браузере. Если файл выполняется корректно, ваша конфигурация работает правильно.


Автор статьи:

Обновлено:

04.06.2024


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *