Не удается настроить Nginx с PHP на Arch Linux

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

Я пытался настроить сервер LEMP (Nginx, PHP, MySQL) на Arch Linux в течение некоторого времени и пытался использовать несколько различных онлайн-учебников.
Недавно я попробовал: http://www.adminempire.com/how-to-insta … mysql-php/.

В этом учебнике меня просят создать отдельный файл php.conf в /etc/nginx/ и добавить:

location ~ \.(php|html|htm)$ {
  try_files      $uri = 404;
  fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
  fastcgi_index  index.php;
  include        fastcgi.conf;
}

Затем добавьте в /etc/nginx/nginx.conf, внутри блока server: include php.copf;

Сначала я перешел по адресу http://localhost, чтобы проверить, работает ли Nginx, а затем протестировал http://localhost/phpinfo.php, и получил ошибку 404. Я перезапустил nginx (без ошибок) и перезапустил php-fpm (даже перезагрузил систему). Всё равно возникает ошибка 404.

Учебник сказал положить файл phpinfo.php в /srv/http/phpinfo.php, но просматривая nginx.conf, я вижу:

location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
}

Поэтому я попробовал в /usr/share/nginx/html/phpinfo.php, и всё равно получаю 404

В вашем каталоге /srv/http создайте файл phpinfo.php, который содержит

<? phpinfo(); ?>

Затем измените ваш файл /etc/nginx/nginx.conf

server {
    listen       80;
    server_name  localhost;
    root         /srv/http;
 
    location / {
        index  index.html index.htm index.php;
    }
 
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi.conf;
    }
}

Наконец, перезапустите nginx и php-fpm и попробуйте следующий URL http://localhost/phpinfo.php

Например, на Arch Linux:

systemctl restart nginx.service
systemctl restart php-fpm.service

В других дистрибутивах могут быть свои способы перезапуска сервисов.

Теперь это должно работать!

Что касается тестирования установки с помощью phpinfo(), рекомендую использовать <?php для открывающего тега, потому что <? может не всегда работать в зависимости от конфигурации вашего php по умолчанию.

Убедитесь, что спецификатор ‘root’ находится непосредственно под ‘server’, как это сделано в первом ‘location’ в стандартной конфигурации.

Мне также пришлось изменить значение open_basedir в файле /php/php.ini, чтобы включить путь к корню сайта.

Это на Arch Linux с php 5.5.13-1, php-fpm 5.5.13-1 и nginx 1.6.0-4.

Моя конфигурация nginx:

server {
    listen       80;

    server_name  sitename.domain;

    error_log    /var/log/nginx/error.log info;

    root   /srv/www/sitename;

    location / {
        index  index.html index.htm index.php;
    }

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

Мой /etc/php/php.ini:

...
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/srv/www/
...

И при тестировании с помощью веб-браузера убедитесь, что вы не перезагружаете страницу из кеша браузера каждый раз, когда вы пытаетесь перезагрузить URL к файлу php, иначе браузер будет продолжать считать ваш файл php обычным сохранённым ресурсом и будет пытаться сохранить его как обычный файл для загрузки. Это может происходить по умолчанию в Chrome/Chromium 34, если у вас не открыты инструменты разработчика, и установлен параметр “Отключить кеш (при открытых инструментах разработчика)”. По моему опыту, Firefox 24.5 лучше всего подходит для тестирования работы php.

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

Для решения проблемы с настройкой Nginx и PHP на Arch Linux, давайте рассмотрим последовательность шагов, которые помогут вам корректно настроить LEMP-сервер.

Шаг 1: Установка необходимых пакетов

Убедитесь, что у вас установлены необходимые пакеты. Вы можете установить Nginx, PHP и PHP-FPM командой:

sudo pacman -S nginx php php-fpm

Шаг 2: Настройка PHP-FPM

По умолчанию, PHP-FPM может быть настроен на использование TCP-сокета. Убедитесь, что он настроен на использование UNIX-сокета. Откройте файл конфигурации PHP-FPM:

sudo nano /etc/php/php-fpm.d/www.conf

Найдите строку, начинающуюся с listen, и измените ее на:

listen = /run/php-fpm/php-fpm.sock

Сохраните изменения и закройте файл.

Шаг 3: Создание файла phpinfo.php

Создайте файл phpinfo.php в директории /srv/http:

echo "<?php phpinfo(); ?>" | sudo tee /srv/http/phpinfo.php

Шаг 4: Настройка Nginx

Отредактируйте конфигурацию Nginx, чтобы указать правильный путь корневой директории и обработку PHP. Откройте файл /etc/nginx/nginx.conf:

sudo nano /etc/nginx/nginx.conf

Внутри блока server добавьте/отредактируйте следующие настройки:

server {
    listen       80;
    server_name  localhost;  # Убедитесь, что этот параметр соответствует вашему доменному имени

    root         /srv/http;   # Убедитесь, что корневая директория указывает на /srv/http

    index        index.php index.html index.htm;  # Убедитесь, что index.php - в списке

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

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
    }
}

Убедитесь, что файл fastcgi.conf имеет корректные пути.

Шаг 5: Перезапуск служб

После изменения конфигураций, перезапустите службы Nginx и PHP-FPM:

sudo systemctl restart php-fpm.service
sudo systemctl restart nginx.service

Шаг 6: Проверка работы

Теперь откройте веб-браузер и перейдите по адресу http://localhost/phpinfo.php. Вы должны увидеть страницу с информацией о PHP.

Возможные проблемы

  1. 404 ошибка:

    • Убедитесь, что файл phpinfo.php действительно существует в директории /srv/http.
    • Убедитесь, что в конфигурации Nginx правильно указана директория документа.
  2. Ошибки в журналах:

    • Проверьте журналы ошибок Nginx и PHP-FPM для получения более детальной информации. Журнал ошибок Nginx можно найти по умолчанию в /var/log/nginx/error.log.
  3. Кэш браузера:

    • Отключите кэш браузера при тестировании, чтобы избежать проблем с отображением старых данных.
  4. open_basedir:

    • Если у вас возникают проблемы с доступом к файлам, проверьте настройки open_basedir в конфигурационном файле php.ini и убедитесь, что в нем указаны корректные пути.

Следуя данным шагам, вы сможете устранить ошибки и успешно настроить сервер Nginx с поддержкой PHP на Arch Linux. Если у вас будут дополнительные вопросы или сложности, не стесняйтесь задавать!

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

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