Вопрос или проблема
Я пытался настроить сервер 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.
Возможные проблемы
-
404 ошибка:
- Убедитесь, что файл
phpinfo.php
действительно существует в директории/srv/http
. - Убедитесь, что в конфигурации Nginx правильно указана директория документа.
- Убедитесь, что файл
-
Ошибки в журналах:
- Проверьте журналы ошибок Nginx и PHP-FPM для получения более детальной информации. Журнал ошибок Nginx можно найти по умолчанию в
/var/log/nginx/error.log
.
- Проверьте журналы ошибок Nginx и PHP-FPM для получения более детальной информации. Журнал ошибок Nginx можно найти по умолчанию в
-
Кэш браузера:
- Отключите кэш браузера при тестировании, чтобы избежать проблем с отображением старых данных.
-
open_basedir:
- Если у вас возникают проблемы с доступом к файлам, проверьте настройки
open_basedir
в конфигурационном файлеphp.ini
и убедитесь, что в нем указаны корректные пути.
- Если у вас возникают проблемы с доступом к файлам, проверьте настройки
Следуя данным шагам, вы сможете устранить ошибки и успешно настроить сервер Nginx с поддержкой PHP на Arch Linux. Если у вас будут дополнительные вопросы или сложности, не стесняйтесь задавать!