Установка Nginx с PHP (как PHP-FPM) и MariaDB (LEMP) в Debian 8
Это руководство существует для этих версий ОС
- Debian 7 (хлюпающий)
На этой странице
- Предварительное примечание
- Обновление системы
- Установка MariaDB (в качестве замены MySQL)
- Установка Nginx
- Установка PHP
- Настройка nginx
- Получение поддержки MySQL/MariaDB в PHP
- Заставить PHP-FPM использовать TCP-соединение (необязательно)
- Образ виртуальной машины
- SSH-вход
- Вход в 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/