Использование PHP-FPM с Apache в Ubuntu 16.04
Это руководство существует для этих версий ОС
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 11.10 (Oneiric Ocelot)
На этой странице
- 1 Предварительное примечание
- 2 Установка MySQL или MariaDB
- 2.1 Установите MySQL 5.7
- 2.2 Установка MariaDB
В этом руководстве показано, как установить веб-сервер Apache на сервер Ubuntu 16.04 с поддержкой PHP 7 (через PHP-FPM) и MySQL. PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для загруженных сайтов.
1 Предварительное примечание
В этом руководстве я буду использовать имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо.
Я выполняю все шаги в этом руководстве с привилегиями root, поэтому убедитесь, что вы вошли в систему как root:
sudo su
2 Установка MySQL или MariaDB
Ubuntu предоставляет пакеты MySQL, а также пакеты MariaDB. MariaDB — это форк MySQL, предоставленный первоначальным разработчиком MySQL Монти Видениусом. Следуйте главам 2.1 или 2.2, чтобы установить сервер базы данных.
2.1 Установите MySQL 5.7
Сначала мы устанавливаем MySQL 5.7 следующим образом:
apt-get -y install mysql-server mysql-client
Вам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен для пользователя [email , поэтому нам не нужно указывать пароль root MySQL вручную позже:
Новый пароль для пользователя \root\ MySQL: <-- yourrootsqlpassword
Повторите пароль для пользователя \root\ MySQL: <-- yourrootsqlpasswordЗапустите mysql_secure_installation, чтобы защитить базу данных MySQL и отключить доступ к тестовой базе данных.
mysql_secure_installation
Вам будут заданы следующие вопросы:
Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y2.2 Установите MariaDB
Выполните следующую команду, чтобы установить сервер и клиент MariaDB:
apt-get -y install mariadb-server mariadb-client
Теперь мы устанавливаем пароль root для MariaDB.
mysql_secure_installation
Вам будут заданы следующие вопросы:
Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y3 Установка Апача
Apache 2.4 доступен в виде пакета Ubuntu. Нам нужен пакет apache2, который мы можем установить следующим образом:
apt-get -y install apache2
Теперь направьте свой браузер на http://192.168.1.100, и вы должны увидеть страницу-заполнитель Apache (это работает!):
Корень документа Apache по умолчанию — /var/www/html в Ubuntu, а файл конфигурации — /etc/apache2/apache2.conf. Дополнительные конфигурации хранятся в подкаталогах каталога /etc/apache2, таких как /etc/apache2/mods-enabled (для модулей Apache), /etc/apache2/sites-enabled (для виртуальных хостов) и /etc/apache2/conf. .д.
4 Установка PHP 7
Мы можем заставить PHP 7 работать в Apache2 через модуль PHP-FPM и Apache mod_fastcgi, который мы устанавливаем следующим образом:
apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0
PHP-FPM — это процесс-демон (с модулем systemd php7.0-fpm.service), который запускает сервер FastCGI в сокете /var/run/php/php7.0-fpm.sock.
Затем включите следующие модули Apache...
a2enmod actions fastcgi alias
... и перезапустите Apache:
systemctl restart apache2.service
5 Настройка Апача
Чтобы Apache работал с PHP-FPM, нам нужна следующая конфигурация:
<IfModule mod_fastcgi.c> AddHandler php7-fcgi .php Action php7-fcgi /php7-fcgi Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>
Вы можете поместить его в глобальную конфигурацию Apache (чтобы он был включен для всех виртуальных хостов), например, в /etc/apache2/conf.d/php7.0-fpm.conf (этот файл не существует, поэтому вы должны его создать) , или вы можете разместить его на каждом виртуальном хосте, который должен использовать PHP-FPM. Я хочу использовать PHP-FPM с виртуальным хостом по умолчанию, поэтому я открываю его файл конфигурации виртуального хоста /etc/apache2/sites-available/000-default.conf.
nano /etc/apache2/sites-available/000-default.conf
... и поместите следующий раздел где-то между
: <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c> SetHandler php7-fcgi .php Action php7-fcgi /php7-fcgi virtual Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>После этого перезапустите Apache:
systemctl restart apache2.service
Теперь создайте следующий файл PHP в корне документа /var/www:
nano /var/www/html/info.php
<?php phpinfo();
Теперь мы вызываем этот файл в браузере (например, http://192.168.1.100/info.php):
Как видите, PHP 7 работает и работает через FPM/FastCGI, как показано в строке API сервера. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP. MySQL там не указан, что означает, что у нас пока нет поддержки MySQL в PHP.
Обратите внимание: если у вас установлен модуль apache PHP 7 (mod_php), это может произойти, например. когда вы начинаете с настройки сервера LAMP вашего интернет-провайдера, а не с пустого сервера, как я сделал это в этом руководстве, вам, возможно, придется отключить mod_php, как показано ниже.
a2dismod php7.0
и перезапустите апач:
systemctl restart apache2.service
6 Получение поддержки MySQL/MariaDB в PHP 7
Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php7.0-mysql. Это хорошая идея, чтобы установить некоторые другие модули PHP, а также они могут вам понадобиться для ваших приложений. Вы можете искать доступные модули PHP следующим образом:
apt-cache search php7.0
Выберите те, которые вам нужны, и установите их следующим образом:
apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl
Теперь перезагрузите PHP-FPM:
systemctl reload php7.0-fpm.service
Теперь перезагрузите http://192.168.1.100/info.php в браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны найти там много новых модулей, включая модуль MySQLi:
7 phpMyAdmin
phpMyAdmin — это веб-интерфейс, через который вы можете управлять своими базами данных MySQL. Это хорошая идея, чтобы установить его:
apt-get -y install phpmyadmin
Вы увидите следующие вопросы:
Web server to reconfigure automatically:<-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enterПосле этого вы можете получить доступ к phpMyAdmin по адресу http://192.168.1.100/phpmyadmin/.
8 Заставить PHP-FPM использовать TCP-соединение (необязательно)
ПРИМЕЧАНИЕ. В этой главе показана настройка PHP-FPM через TCP. Я покажу это в качестве примера конфигурации, и могут быть настройки, в которых вам это нужно, например. когда процесс fastcgi запускается на втором сервере, но в целом быстрее использовать сокеты. Поэтому вы можете пропустить эту главу.
По умолчанию PHP-FPM прослушивает сокет /var/run/php/php7.0-fpm.sock. Также можно заставить PHP-FPM использовать TCP-соединение. Для этого откройте /etc/php5/fpm/pool.d/www.conf...
nano /etc/php/7.0/fpm/pool.d/www.conf
... и сделайте так, чтобы строка прослушивания выглядела следующим образом:
[...] ;listen = /var/run/php/php7.0-fpm.sock listen = 127.0.0.1:9000 [...]
Это заставит PHP-FPM прослушивать порт 9000 на IP 127.0.0.1 (localhost). Убедитесь, что вы используете порт, который не используется в вашей системе.
Затем перезагрузите PHP-FPM:
systemctl reload php7.0-fpm.service
Затем просмотрите конфигурацию Apache и все ваши виртуальные хосты и измените строку FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization на FastCgiExternalServer. /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Авторизация, например. как это:
nano /etc/apache2/sites-available/000-default.conf
[...] <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule> [...]Наконец, перезагрузите Apache:
systemctl reload apache2.service
9 ссылок
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Убунту: http://www.ubuntu.com/
- phpMyAdmin: http://www.phpmyadmin.net/