Поиск по сайту:

Использование PHP-FPM с Apache в Ubuntu 16.04


Это руководство существует для этих версий ОС

  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 11.10 (Oneiric Ocelot)

На этой странице

  1. 1 Предварительное примечание
  2. 2 Установка MySQL или MariaDB
    1. 2.1 Установите MySQL 5.7
    2. 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] <-- y

    2.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] <-- y

    3 Установка Апача

    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/