Традиционный способ запуска PHP — использование Apache HTTP Server с использованием mod_php. Фактически, mod_php был самым популярным модулем Apache вплоть до 2009 года, когда это требование перешло к mod_ssl. Но по мере роста Интернета и развития технологий, которые стали его основой, стали доступны другие способы обслуживания сайтов и приложений на PHP. nginx, сервер, созданный для решения проблемы C10k, поглощает долю рынка Apache , а использование PHP за nginx с FastCGI становится все более распространенной альтернативой.
Настройка PHP и nginx немного сложнее, чем традиционная Apache, хотя в недавнем прошлом она стала проще благодаря лучшей упаковке и настройкам по умолчанию. Эта статья проведет вас через процесс настройки PHP и nginx для обслуживания вашего собственного высокопроизводительного веб-сайта. Я предполагаю, что вы работаете на Ubuntu Server (я использую Ubuntu 13.04, 64-битная версия), и мы установим основные приложения, используя Apt.
FastCGI в двух словах
На заре веб-разработки разработчикам требовался способ запуска сценариев на сервере для генерации содержимого страницы и запуска других процессов, поэтому для облегчения этого был разработан протокол CGI (Common Gateway Interface).
CGI определяет среду (переменные среды, переменные, специфичные для запроса и т. Д.), В которой будет выполняться скрипт, и способ передачи данных между скриптом и веб-сервером. Для каждого запроса CGI устанавливает среду, порождает запущенный экземпляр сценария и передает ему все входящие данные, а также собирает и отправляет выходные данные сценария на сервер.
Конечно, у CGI есть свои плюсы и минусы. С другой стороны, CGI не зависит от языка, то есть сценарии могут быть написаны на любом языке программирования, который удобен для разработчика (например, Perl, C, bash и т. Д.), И каждое выполнение выполняется изолированно от веб-сервера, который Предотвращает ошибки в сценарии от возможного сбоя всего веб-стека. С другой стороны, для каждого запроса создается новый процесс, который может потреблять много ресурсов процессора и занимать много времени.
FastCGI по сути является CGI с некоторыми улучшениями, которые устраняют недостатки CGI. Это сокращает время / нагрузку на ЦП благодаря использованию постоянного процесса для выполнения сценариев, а данные между веб-сервером и FastCGI передаются с использованием сокетов, что способствует более масштабируемой архитектуре служб (фермы серверов и балансировка нагрузки, асинхронная связь между веб-сервером и FastCGI, и т.д.).
Для получения дополнительной информации о FastCGI ознакомьтесь с техническим документом на веб-сайте FastCGI, а для реализации PHP, в частности, ознакомьтесь с руководством по PHP .
Базовая установка и настройка
Чтобы установить PHP через Apt, выполните в командной строке следующее:
sudo apt-get установить php5-cli php5-fpm
Затем, чтобы установить nginx, выполните:
sudo apt-get установить nginx
Apt определит необходимые зависимости в каждом случае и запросит подтверждение для продолжения. После получения Apt загрузит и установит запрошенные пакеты и их зависимости.
Ubuntu помещает файлы конфигурации nginx в /etc/nginx
Фрагменты общей конфигурации хранятся в этом корне, а конкретные настройки сервера находятся на sites-available
sites-enabled
Рекомендуется избегать редактирования исходных файлов конфигурации, поэтому я предлагаю использовать копии и сохранять оригиналы в чистоте. Таким образом, вы можете настроить nginx по своему вкусу и не беспокоиться о том, что ваши усилия будут переписаны Apt во время будущих обновлений. У вас также есть исходная конфигурация по умолчанию, к которой можно вернуться, если вам это никогда не понадобится.
Удалите символьную ссылку в sites-enabled
default
sites-available
cd / etc / nginx sudo rm sites-enabled / default sudo cp sites-available / default-sites-available / my-default sudo ln -s / etc / nginx / sites-available / my-default sites-enabled / default
Чтобы получить запросы PHP прокси-сервера nginx к службе FastCGI, откройте только что скопированный файл конфигурации и найдите раздел, который начинается с:
# передать PHP-скрипты серверу FastCGI, прослушивающему 127.0.0.1:9000 # #location ~ \ .php $ {
Раскомментируйте строку location
fastcgi_split_path_info
Когда вы закончите, раздел должен выглядеть следующим образом:
# передать PHP-скрипты серверу FastCGI, прослушивающему 127.0.0.1:9000 # location ~ \ .php $ { fastcgi_split_path_info ^ (. + \. php) (/.+) $; # # ПРИМЕЧАНИЕ: у вас должно быть "cgi.fix_pathinfo = 0;" в php.ini # # # Только с php5-cgi: # fastcgi_pass 127.0.0.1:9000; # # С php5-fpm: fastcgi_pass unix: /var/run/php5-fpm.sock; fastcgi_index index.php; включить fastcgi_params; }
Сохраните изменения и запустите nginx.
sudo service nginx start
Подключитесь к серверу через браузер, и вы увидите экран приветствия nginx.
Конфигурация по умолчанию указывает /usr/share/nginx/html
В этом каталоге создайте файл с именем info.php
phpinfo()
В выходных данных вы должны увидеть серверный API в списке «FPM / FastCGI».
Дополнительная конфигурация
Поздравляем! У вас есть базовая установка и обслуживание nginx и PHP! Но есть несколько дополнительных шагов настройки, которые я рекомендую.
Web Root Permissions
Быстрая проверка разрешений веб-root показывает, что он не доступен для записи кому-либо, кроме root. Постоянное sudo
sudo adduser <имя пользователя> www-data sudo chgrp -R www-data / usr / share / nginx / html sudo chmod -R g + rw / usr / share / nginx / html sudo chmod g + s / usr / share / nginx / html
adduser
<username>
www-data
chgrp
html
www-data
Затем первая команда chmod
html
html
www-data
Обратите внимание, что второй chmod
После того, как четыре команды были выполнены, вам нужно будет перезагрузить вашу оболочку, чтобы групповые ассоциации в вашей учетной записи вступили в силу. Выйдите, а затем снова войдите. После того, как вы войдете в систему, вы сможете создавать, редактировать и удалять файлы в корневом веб-каталоге в соответствии с вашими предпочтениями, используя стандартный вход в систему, без каких-либо расширенных привилегий.
Несуществующие сценарии
Я также рекомендую добавить директиву try_files
location
location ~ \ .php $ { fastcgi_split_path_info ^ (. + \. php) (/.+) $; try_files $ uri $ uri / = 404; ...
Это защищает вас от известной уязвимости, которая возникает из-за неправильно настроенной системы, в которой nginx использует различные шаблоны для удовлетворения запроса. Возможно, вы захотите настроить точный список значений после прочтения документации для try_files
и принять во внимание потребности вашего приложения, но вышеприведенное должно обеспечить минимальный уровень защиты.
Портирование файлов .htaccess
В какой-то момент вы захотите обслуживать существующее приложение PHP, которое ранее обслуживалось Apache, и, скорее всего, оно будет иметь некоторые подробности конфигурации для сервера либо в файле .htaccess
Есть пара онлайн- конвертеров, которые «переводят» директивы Apache в nginx, и это хорошая отправная точка при переносе вашей конфигурации. Но будьте осторожны, чтобы не полагаться на них полностью. Как говорится , «Вставка кода из Интернета в производство — это как жвачка, найденная на улице». Ознакомьтесь с документацией nginx и перепроверьте выходные данные конвертера, чтобы убедиться, что все в порядке.
Вывод
Традиционный способ запуска PHP (Apache и mod_php) стабилен и зрел, и для большинства приложений является отличной платформой. Но ситуация меняется, и более производительные решения, такие как nginx, получают широкое признание, даже поглощая долю рынка Apache. В этой статье вы увидели, как настроить PHP для запуска за nginx с FastCGI. И с вашими новыми блестящими инсталляциями, готовыми к тому, чтобы создать свой собственный высокопроизводительный веб-сайт в массы, я желаю вам успеха!