- Установка PHP как FastCGI под Apache (Windows 10)
- Разные версии PHP
- Настройка связки Nginx Apache FastCGI
- PHP с поддержкой FastCGI интерфейса
- Установка и настройка spawn-fcgi для запуска FastCGI сарвера PHP
- Настройка веб сервера Apache
- Настройка веб сервера Nginx, на работу с бакэндами, Apache и FastCGI
- Пошаговая настройка Apache с выбором версий php + Nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04
Установка PHP как FastCGI под Apache (Windows 10)
При установке Битрикс столкнулся с необходимостью изменять настройки PHP в файле php.ini . Например, вот эти
Но, поскольку у меня PHP установлен как модуль Apache, эти изменения затронули все виртуальные хосты. Из-за этого перестал работать phpMyAdmin. Пришлось устанавливать PHP как FastCGI, чтобы для каждого виртуального хоста был свой файл php.ini .
Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.
FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.
FastCGI убирает это ограничение, сохраняя процесс запущенным и передавая запросы этому постоянно запущенному процессу. Это позволяет не тратить время на запуск новых процессов.
В то время как CGI-программы взаимодействуют с сервером через STDIN и STDOUT запущенного CGI-процесса, FastCGI-процессы используют Unix Domain Sockets или TCP/IP для связи с сервером. Это значит, что FastCGI-программы могут быть запущены не только на этом же сервере, но и где угодно в сети. Также возможна обработка запросов несколькими FastCGI-процессами, работающими параллельно.
Для начала скачиваем модуль mod_fcgid с сайта apachelounge.com, распаковываем и кладем в директорию modules сервера Apache. У меня это C:/wamp/apache/modules . Далее, переходим в директорию apache/conf и вносим изменения в файл конфигурации Apache httpd.conf :
В конец файла дописываем:
Последняя директива означает, что файл php.ini расположен в директории C:/wamp/php71 . Это будет файл конфигурации PHP по умолчанию. Строки, которые отвечают за работу PHP как модуля Apache, удаляем или комментируем:
Теперь редактируем файл виртуальных хостов httpd-vhosts.conf . У меня он расположен в C:/wamp/apache/conf/extra :
Для каждого виртуального хоста добавляем одну строчку, которая переопределяет переменную среды PHPRC . После этого берем дефолтный php.ini из директории C:/wamp/php71 и копируем в директорию каждого хоста. У меня это
- D:/work/localhost
- D:/work/localhost1
- D:/work/localhost2
- D:/work/localhost3
В каждом файле php.ini находим строки
и установливаем значение doc_root :
Теперь у каждого виртуального хоста будет свой php.ini . Осталось только перезапустить Apache, чтобы изменения вступили в силу.
Разные версии PHP
Если для какого-то проекта нужно использовать другую версию PHP, вносим изменения в файл httpd-vhosts.conf
У меня PHP 5.6 установлен в директории C:/wamp/php56 , поэтому именно оттуда я взял php.ini и скопировал в D:/work/localhost4 .
Чуть позже столкнулся с ошибкой при тестировании системы в Битрикс (Настройки • Инструменты • Проверка системы):
Проверил настройки php.ini , связанные с загрузкой файлов:
Вроде все в порядке. Тогда посмотрел еще логи Apache, и там увидел ошибку:
Значение по умолчанию FcgidMaxRequestLen равно 131072 байт (128 Кб). Добавил в конец файла httpd.conf :
Этого должно быть достаточно, но есть еще и другие настройки:
Источник
Настройка связки Nginx Apache FastCGI
В предыдущей статье «Установка и настройка веб сервера Nginx в качестве проксирующего фронтэнда к Apache«, был рассмотрен простой вариант установки и использования Nginx, с настройками по-умолчанию, в качестве проксирующего сервера, с сервером Apache в качестве проксиркемого бакэнда.
В данном материале хотелось-бы рассказать о более сложном варианте установки и настройки Nginx, для построения связки Nginx Apache FastCGI. Для организации FastCGI сервера, будет использована утилиты, spawn-fcgi, ранее входившая в состав веб сервера lighttpd, а теперь выделенная в отдельный порт.
Схема работы связки Nginx — Apache — FastCGI, выглядит следующим образом:
Теперь на словах. Все запросы приходят на адрес, на котором сервер Nginx принимает соединения. Согласно настройкам в конфигурационном файле Nginx:
- Все статические запросы ( HTML файлы, картинки ), будут обработаны веб сервером Nginx самостоятельно, после чего результат будет выдан клиенту;
- Запросы к CGI и Perl ( файлы CGI, PL ) скриптам, будут отправлены на обработку Apache, после обработки, результат будет передан в Nginx и отдан клиенту;
- Все запросы к скриптам PHP, будут перенаправлены на сервер FastCGI, после обработки, результат опять-же будет возвращен в Nginx и выдан клиенту;
Итак, что мы имеем: операционная система FreeBSD 7.1 STABLE ( платформа amd64 ), установленный веб сервер Apache/2.2.9. Установка Nginx производилась со следующими опциями:
PHP с поддержкой FastCGI интерфейса
Настройку сервера Nginx, сделаем чуть позже, сначала настроим FastCGI сервер, установив все необходимое. Что вообще такое, FastCGI. В общем понимании, это протокол взаимодействия, между веб сервером и приложением, не зависимый от языка приложения и являющийся куда более производительным и безопасным, нежели обычный CGI. Если коротко, обычную CGI программу, веб серверу, приходится запускать на каждый запрос, в то время как FastCGI, постоянно держит запущенный процесс, который и обслуживает приходящие ему запросы. Кроме того веб сервер, связывается с FastCGI сервером, через так называемый «Unix domain socket» или через TCP/IP, в отличии от обычного CGI, который взаимодействует с сервером через стандартный ввод/вывод, что дает возможность располагать FastCGI сервер, не только в рамках одной машины, но и вообще где угодно в сети.
В контексте данного материала, речь идет о языке PHP, собранном с поддержкой FastCGI и запущенном с помощью специального приложения.
Для поддержки данного режима работы, PHP, должен быть скомпилирован с соответствующими опциями и иметь необходимый бинарник ( запускаемый файл, по умолчанию php-cgi.) Следующие опции необходимы для сборки PHP с поддержкой FasCGI и обеспечения необходимого уровня безопасности:
—enable-fastcgi
—enable-force-cgi-redirect
—enable-discard-path
Остальные опции ставите в зависимости от ваших потребностей.
Посмотреть опции, с которыми собран PHP, можно так:
Установка и настройка spawn-fcgi для запуска FastCGI сарвера PHP
Процесс сборки и установки длится меньше минуты. По завершению, будет создано несколько файлов:
/usr/local/bin/spawn-fcgi #Запускаемый файл программы
/usr/local/etc/rc.d/spawn-fcgi #Cтартовый скрипт, для запуска FastCGI сервера
Как правило я использую Unix Socket для связи сервера Nginx с FastCGI сервером ( хотя в случае возникновения проблем, можно использовать TCP/IP ), поэтому идем править стартовый скрипт, приведя его переменные к такому виду:
Полный список опций программы spawn-fcgi, приведен тут Spawn-fcgi запуск процессов в FastCGI режиме
Не забываем добавить строку spawn_fcgi_enable=»YES» в стартовый скрипт /etc/rc.conf, для запуска FastCGI сервера при старте системы.
Пробуем запустить spawn-fcgi:
FastCGI сервер готов к работе
Настройка веб сервера Apache
Настройка сервера Apache, аналогична той, которую мы делали в статье «Установка и настройка веб сервера Nginx в качестве проксирующего фронтэнда к Apache». То есть задача сводится к смене IP адреса и, если необходимо, порта, на которых веб-сервер Apache будет принимать запросы от Nginx и опять-же по мере надобности, настройка виртуальных хостов, так-же затронутая в вышеприведенной статье. Напомню, сервер Apache будет принимать соединения на локальном адресе 127.0.0.1, порт 80. Кроме того, все в той-же статье, мы настроили модуль сервера Apache, mod_rpaf, для передачи в Apache, реальных адресов клиентов, а не внутреннего адреса сервера Nginx.
Настройка веб сервера Nginx, на работу с бакэндами, Apache и FastCGI
Опции с которыми был установлен сервер Nginx, приводились выше, то есть по сути, это «умолчальная» установка, изменены некоторые пути, как мне привычней и включен модуль для просмотра статусной страницы Nginx.
Перейдем к конфигурационному файлу.
Хотелось-бы отметить, что окончательный вид конфигурационного файла Nginx, зависит от вашей конкретной системы, то есть например, различные таймауты, размеры и количество буферов, передаваемые заголовки и т.д., должны быть установлены, исходя из задач, решаемых на данном сервере. Поэтому давать рекомендации в стиле, «поставьте этого столько а того столько и напишите это.. потому что у меня это работает.. «, считаю неуместным.
Здесь у нас рабочий вариант конфигурационного файла nginx, так сказать, без наворотов, лишь необходимый минимум. Выглядит он у нас следующим образом:
Проверяем правильность файла конфигурации:
Все в порядке, можно запускать
Проверим что у нас там показывает netstat:
Теперь все это можно проверить через браузер, набрав имя хоста Nginx или IP адрес. Что-бы убедиться что PHP скрипты обрабатываются нашим FastCGI сервером, можно создать файл следующего содержания:
и положить его в корневую директорию документов сайта. Теперь запросив его через браузер, мы увидим страницу PHP, с кучей различной технической информации, включая опции сборки, настройки, модули, расширения, конфигурационные файлы и т.д. Находим строку Server API, и видим в каком режиме работает PHP на данном хосте, это у нас, CGI/FastCGI, то есть, то что нам и было нужно.
Источник
Пошаговая настройка Apache с выбором версий php + Nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04
В интернете кучу статей по настройке сервера, настройки Apache, Nginx и т.п. В данной статье будет пошагово настроен простой shared хостинг. Все операции производятся через консоль.
В посте будут решены и описаны следующий задачи:
1. Установка Apache + PHP
2. Возможность выбора версий PHP
3. Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.
4. Установка Nginx с модулем pagespeed от google
5. Настройка Nginx как reverse proxy
Все этапы будут содержать описание и пояснения. Сам пост писался больше для себя, чтобы не потерять порядок настройки, но будет очень полезным для новичков, которые начинают разбираться в администрировании сервера. В качестве сервера установлен Ubuntu 16.0.4 только с SSH.
ЭТАП 1 (Установка Apache + PHP)
Запускаем оболочку с root правами:
Ключ нужен для того чтобы в процессе установки, автоматически на все вопросы отвечал положительно. К примеру если выполнить:
то в процессе установки нас спросят, действительно ли мы хотим установить.
Устанавливаем php (как mod_php)
На данном этапе у нас установиться php версии 7 как модуль apache.
ЭТАП 2 (Возможность выбора версий PHP)
На первом этапе мы установили сервер Apache + PHP при чем PHP у нас работает как модуль Apache. Существует несколько режимов работы PHP подробную информацию можно прочитать по ссылке «Коротко о CGI, FastCGI, PHP-FPM и mod_php».
Если вам лень читать, то объясню проще:
1. mod_php — сам Apache выполняет php скрипт.
Плюсы: работает быстро, требует минимум настроек и знаний
Минусы: скрипты выполняются от пользователя apache (как правило www-data)
2. CGI/FastCGI — Сервер Apache запускает прикладной скрипт интерпретатора php-cgi, который в свою очередь выполняет php скрипт
Плюсы: скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP), конфигурацию PHP можно сделать индивидуальной
Минусы: скорость работы, дополнительная настройка
3.PHP-FPM — это модернизированный fast-cgi сервер который постоянно держит готовые для работы пул-процессов.
Плюсы: скорость работы, скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP-FPM — самая распространная реализация)
Минусы: дополнительная настройка, занимает порт, на каждого пользователя открывается свой порт.
Мы остановимся на CGI/FastCGI. На самом деле многие может испугать, что он самый медленный, но на большинстве shared хостингов, именно этот режим работы (ispmanager использует именно этот режим работы). Нам потребуется собрать из исходников версии php которые нам необходимы.
2.1 Сборка php из исходников
Устанавливаем необходимые для сборки пакеты:
Символ \ используется как перенос строки, для удобства чтения.
Создаем папки для php:
Переходим в директорию в которой будут храниться исходники php
Скачиваем необходимую версию php и распаковываем ёё:
В последней команде мы скачали по ссылке php-5.6.18 и сохранили как php-5.6.18.tar.bz2
После чего распаковали архив.
Переходим в директория скаченного и распакованного php
Стоить обратить внимание на строку —prefix=/opt/php/php-5.6.18. Именно в эту директорию будет собран проект. Также вы самостоятельно можете добавлять или удалять необходимые модуль и компоненты php. Но при конфигурации обязательно должны быть —enable-fastcgi и —enable-force-cgi-redirect. После конфигурации собираем php
Процесс сборки непривычно долгий, поэтому не стоит переживать по этому поводу. По завершению сборки можно проверить командой:
В результате будет что то вроде:
PHP 5.6.18 (cli) (built: Jun 8 2017 15:59:20)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies
2.2 Настройка Apache
Далее нам потребуется чтобы Apache вызывал php скрипт через режим fastcgi. Устанавливаем и активируем mod_fcgi
перезапустим сервис Apache
2.3 Создание CGI скрипта
Создадим обертку для запуска PHP-FastCGI
В данной папке создадим скрипт с именем php со следующим содержимом
#!/opt/php/php-5.6.18/bin/php-cgi . Лично я использую редактор nano.
Вставляем код, выходим CTRL+X и подтверждаем изменения.
Делаем файл испольняемым:
В той же директории создаем файл php.ini () можно скопировать /opt/source/php/php-5.6.18/php.ini-production.
2.4 Настройка хоста для Apache
В примере будет показана настройка виртуального хоста по умолчанию:
Перезапускаем настройки Apache:
ЭТАП 3 ( Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.)
Для разграничения прав по пользователям у Apache есть 2 разных модуля suEXEC и ITK.
Рассмотрим как работает каждый из них:
ITK — При поступлении запроса, apache создает процесс-обработчик, который наследует права корневого процесса, но после проверки контекста меняет свои права на указанного пользователя.
suEXEC -При поступлении запроса apache запускает CGI и аналогичные собственные или сторонних разработчиков скрипты/программы внутри веб-папки домена от имени указанного пользователя.
suEXEC в нашем варианте предпочтительней из-за особенности архитектуры работы. Устанавливаем suEXEC
Важно, для правильной работы suexec необходимы правильно выставить права на директории.
Как располагать директории вы должны определиться сами, в примере приведется пример, и он не является оптимальным.
Иерархия папок следующая:
|—/var/www/ — Корневая папка, права 751 владелец root
|—-/php-bin — Папка храннения дефолтных настроек для php
|——/php-5.6.18 — Папка храннения дефолтных настроек для php-5.6.18
|———php — Исполняемый файл для php-5.6.18
|———php.ini — Дефольный файл настроке
|———php.ini — Дефольный файл настроке
|—-/apache-cert — папка хранения сертификатов для apache
Создаем папки для пользователя:
Копируем файлы настроек для php:
Создаем юзера (важно помнить что все пользователи в группе admin имеют доступ на запуск программ из sudo, поэтому при выборе имени admin он автоматически будет иметь права на выполнения sudo. В данном примере это не критично, но вам следует помнить об этом при создании пользователя).
Выставляем владельца папки:
Выставляем корневую директорию для пользователя:
Настраиваем виртуальные хосты в apache:
В настройках php.ini пользователя меняем session.save_path
session.save_path = /var/www/users/admin/temp/php-session
ЭТАП 4 (Установка Nginx с модулем pagespeed от google)
Забегая вперед, для поддержки pagespeed в Nginx требуется пересобрать сам Nginx с этим модулем, но чтобы потом не лазить дополнительно в настройках, проще сначало установить его.
Изменяем порты для Apache:
Собираем Nginx с pagespeed
Вначале необходимо установить все необходимы для сборки пакеты:
Создаем папки для исходников nginx:
Скачиваем и распаковываем pagespeed и psol. Yt cnjbn g
Сам psol скачивается и распаковывается в директории с ngx_pagespeed. Переходим в папку с Ngnix
Проверяем версию ngnix (по умолчанию в ubuntu 16.0.4 устанавливается 1.10.0):
Загружаем т версию NGINX:
Собираем nginx с теми же параметрами что и установленный, но в конце добавляем дополнительные модули:
Собранный бинарный файл Nginx располагается в директории /opt/source/nginx/nginx-1.10.0/objs/nginx. Для того чтобы установить, требуется просто заменить текущий испоняемый файл Nginx на собранный.
Остановим Nginx, заменим файл, и перезапустим его.
#Переименовываем (на всякий случай) текущий nginx в nginx_backup:
# Перемещаем на его место новый собранный бинарник:
Создаем папку хранения кэша для pagespeed:
Добавим /etc/nginx/nginx.conf в секцию http:
ЭТАП 5 (Настройка Nginx как reverse proxy )
Скажу скажу что в интернете кучу статей для настройки Nginx как reverse proxy. Я лиш приведу ознакомительный вариант настройки.
Источник