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

Установка Nginx с PHP (как PHP-FPM) и MariaDB (LEMP) в Debian 8


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

  • Debian 7 (хлюпающий)

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

  1. Предварительное примечание
  2. Обновление системы
  3. Установка MariaDB (в качестве замены MySQL)
  4. Установка Nginx
  5. Установка PHP
  6. Настройка nginx
  7. Получение поддержки MySQL/MariaDB в PHP
  8. Заставить PHP-FPM использовать TCP-соединение (необязательно)
  9. Образ виртуальной машины
    1. SSH-вход
    2. Вход в MariaDB

    В этом руководстве показано, как установить веб-сервер Nginx на Debian 8 (PHP-FPM) и MariaDB в качестве замены MySQL. Эту настройку часто называют LEMP=Linux + nginx (произносится \engine x\) + MySQL + PHP) .

    Предварительное примечание

    В этом руководстве я использую имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо. У вас должен быть сервер Debian 8. Я буду использовать минимальный сервер Debian в качестве базовой системы для этого руководства.

    Обновление системы

    Рекомендуется обновить списки пакетов и установить все ожидающие обновления, прежде чем мы начнем настройку Nginx. Выполните следующие команды, чтобы установить все ожидающие обновления.

    apt-get update
    apt-get upgrade -y

    Позже я буду использовать редактор nano для редактирования файлов конфигурации. Nano можно установить с помощью этой команды:

    apt-get -y install nano 

    Установка MariaDB (в качестве замены MySQL)

    Чтобы установить MariaDB, мы запускаем:

    apt-get -y install mariadb-server mariadb-client

    Вам будет предложено ввести пароль для пользователя root MariaDB — этот пароль действителен для пользователя [email , поэтому позже нам не нужно указывать пароль root пользователя MariaDB вручную:

    Новый пароль для пользователя «root» в MariaDB: <-- yourrootsqlpassword
    Повторите пароль для пользователя «root» в MariaDB: <-- yourrootsqlpassword

    Установка Nginx

    Nginx доступен в виде пакета для Debian Jessie, который мы можем установить следующим образом:

    apt-get -y install nginx

    После этого запустите Nginx:

    systemctl start nginx.service

    Введите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.1.100), и вы должны увидеть следующую страницу:

    Корень документа nginx по умолчанию в Debian 8 — /var/www/html.

    Установка PHP

    Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для более загруженных сайтов), которые мы устанавливаем следующим образом:

    apt-get -y install php5-fpm

    PHP-FPM — это процесс-демон (с файлом модуля systemd php5-fpm.service), который запускает сервер FastCGI в сокете /var/run/php5-fpm.sock.

    Настройка nginx

    Конфигурация nginx находится в файле /etc/nginx/nginx.conf, который мы сейчас открываем:

    nano /etc/nginx/nginx.conf

    Конфигурация проста для понимания (подробнее о ней можно узнать здесь: http://wiki.nginx.org/NginxFullExample2)

    Сначала установите для keepalive_timeout разумное значение, например 2 секунды:

    [...]
        keepalive_timeout   2;
    [...]

    Виртуальные хосты определяются в контейнерах server {}. Виртуальный хост по умолчанию определен в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:

    nano /etc/nginx/sites-available/default
    [...]
    server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name _;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
    deny all;
    }
    } [...]

    имя сервера _; делает это общим виртуальным хостом по умолчанию (конечно, вы также можете указать здесь имя хоста, например www.example.com).

    Я добавил index.php в строку index. корень /var/www/html; означает, что корнем документа является каталог /var/www/html.

    Важной частью PHP является строфа location ~ \.php${}. Раскомментируйте его, как показано выше, чтобы включить его.

    Теперь сохраните файл и перезагрузите Nginx:

    systemctl reload nginx.service

    Затем откройте /etc/php5/fpm/php.ini...

    nano /etc/php5/fpm/php.ini

    ... и установите cgi.fix_pathinfo=0:

    [...]
    ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
    ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
    ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
    ; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
    ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
    ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    ; http://php.net/cgi.fix-pathinfo
    cgi.fix_pathinfo=0
    [...]

    Перезагрузите PHP-FPM:

    systemctl reload php5-fpm.service

    Теперь создайте следующий файл PHP в корне документа /var/www/html/:

    nano /var/www/html/info.php
    <?php
    phpinfo();
    ?>

    Теперь мы вызываем этот файл в браузере (например, http://192.168.1.100/info.php):

    Как видите, PHP5 работает и работает через FPM/FastCGI, как показано в строке API сервера. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5. MySQL там не указан, что означает, что у нас пока нет поддержки MariaDB/MySQL в PHP.

    Получение поддержки MySQL/MariaDB в PHP

    Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php5-mysqlnd. Это хорошая идея, чтобы установить некоторые другие модули PHP, а также они могут вам понадобиться для ваших приложений. Вы можете искать доступные модули PHP следующим образом:

    apt-cache search php5

    Выберите те, которые вам нужны, и установите их следующим образом:

    apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

    APCu — это бесплатный и открытый кешировщик кода операции PHP для кэширования и оптимизации промежуточного кода PHP, который расширяет возможности операционного кэша PHP. Он заменяет кэш APC. и он похож на другие кешировщики кода операции PHP, такие как eAccelerator и Xcache. Настоятельно рекомендуется установить один из них, чтобы ускорить вашу PHP-страницу.

    APCu можно установить следующим образом:

    apt-get install php5-apcu

    Теперь перезагрузите PHP-FPM:

    systemctl reload php5-fpm.service

    Теперь перезагрузите http://192.168.1.100/info.php в браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны найти там много новых модулей, включая модуль MySQL:

    Заставить PHP-FPM использовать TCP-соединение (необязательно)

    По умолчанию PHP-FPM прослушивает сокет /var/run/php5-fpm.sock. Также можно заставить PHP-FPM использовать TCP-соединение. Для этого откройте /etc/php5/fpm/pool.d/www.conf...

    nano /etc/php5/fpm/pool.d/www.conf

    ... и сделайте так, чтобы строка прослушивания выглядела следующим образом:

    [...]
    ;listen = /var/run/php5-fpm.sock
    listen = 127.0.0.1:9000
    [...]

    Это заставит PHP-FPM прослушивать порт 9000 на IP 127.0.0.1 (localhost). Убедитесь, что вы используете порт, который не используется в вашей системе.

    Затем перезагрузите PHP-FPM:

    systemctl reload php5-fpm.service

    Затем просмотрите конфигурацию Nginx и все ваши виртуальные хосты и измените строку fastcgi_pass unix:/var/run/php5-fpm.sock; на fastcgi_pass 127.0.0.1:9000; например, как это:

    nano /etc/nginx/sites-available/default
    [...]
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # # With php5-fpm:
    # fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_pass 127.0.0.1:9000;
    } [...]

    Наконец, перезагрузите Nginx:

    systemctl reload nginx.service

    Образ виртуальной машины

    Это руководство доступно как готовая к использованию виртуальная машина в формате OVA/OVF для подписчиков Howtoforge. Формат VM совместим с VMWare и Virtualbox и, возможно, с некоторыми другими инструментами, которые могут импортировать этот формат. Вы можете найти ссылку для скачивания в правом меню вверху. Нажмите на имя файла, чтобы начать загрузку.

    Данные для входа в виртуальную машину:

    Вход по SSH

    Имя пользователя: root
    Пароль: howtoforge

    Войти

    Имя пользователя: root
    Пароль: howtoforge

    Пожалуйста, измените пароли после первой загрузки.

    ВМ настроена на статический IP 192.168.1.100, IP можно изменить в файле /etc/network/interfaces.

    Ссылки

    • nginx: http://nginx.net/
    • Вики-сайт nginx: http://wiki.codemongers.com/Main
    • PHP: http://www.php.net/
    • PHP-FPM: http://php-fpm.org/
    • MariaDB: https://mariadb.org/
    • Debian: http://www.debian.org/