В одном из предыдущих постов я рассказал об основах работы с веб-сервером nginx. Мы установили его и настроили виртуальный хост со статическим index файлом. Теперь пришла очередь оживить наш хост с помощью php. Php это пока самый популярный язык программирования, используемый в веб-разработке для генерации динамических страниц.
Так как nginx, в отличие от другого веб-сервера Apache, не содержит встроенного php-процессора, то мы будем использовать сервер php-fpm, что означает «fastCGI process manager». Мы укажем nginx передавать запросы на него для обработки.
Установим этот пакет следующей командой
1 | sudo apt-get install php5-fpm |
Базовая конфигурация PHP по умолчанию содержится в файле
1 | sudo nano /etc/php5/fpm/php.ini |
Основная конфигурация fpm лежит в файле
1 | /etc/php5/fpm/php-fpm.conf |
В конце этого файла подключаются файлы виртуальных пулов
из директории /etc/php5/fpm/pool.d/
Нас интересует файл /etc/php5/fpm/pool.d/www.conf
В нем нужно убедится что в строках user, group, listen.owner и listen.group указан наш пользователь, под которым у нас работает nginx. Чаще всего это www-data, но можно указать любого другого.
Также нужно указать сокет, через который fpm будет общаться с nginx.
listen = /var/run/php5-fpm.sock
Чтобы изменения вступили в силу, php-fpm нужно перезапустить
1 | sudo service php5-fpm restart |
Теперь нужно настроить хост в nginx
Создадим файл:
1 | touch /etc/nginx/common/upstream |
В котором создадим upstream, который в дальнейшем можно использовать для всех виртуальных хостов.
1 2 3 | upstream php-handler{ server unix:/var/run/php5-fpm.sock; } |
Этот файл нужно подключить в основном конфигуграции nginx:
1 | sudo nano /etc/nginx/nginx.conf |
В конце файла, перед строками:
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Добавить строку:
include common/upstream;
Затем в директории /etc/nginx/sites-available/
Создадим файл с нашим хостом, допустим, он называется mysite.local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | server { listen 80; root /home/sites/mysite.local/public_html; index index.php index.html index.htm; server_name mysite.local; location / { index index.php index.html index.html; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php-handler; } } |
В строке
root /home/sites/mysite.local/public_html;
Указана директория в которой должен находиться индексный файл сайта.
Создадим там файл для проверки.
1 | echo "<?php phpinfo();" > /home/sites/mysite.local/public_html/index.php |
Создаем ссылку на конфигурацию в директорию sites-enabled, из которой nginx считывает виртуальные хосты;
1 | ln -s /etc/nginx/sites-available/mysite.local /etc/nginx/sites-enabled/mysite.local |
Протестируем конфигурацию nginx
1 | sudo nginx -t |
Ответ должен быть похож на этот:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Теперь перезапускаем nginx
1 | sudo service nginx restart |
Теперь, если все прошло хорошо, nginx будет передавать запросы к php, а тот возвращать результат, который мы увидим в браузере. В нашем случае, это будет страница с информацией функции phpinfo().