Как установить Nginx, MariaDB 10, PHP 7 (стек LEMP) в версиях 16.10/16.04
Стек LEMP — это аббревиатура, обозначающая группу пакетов (ОС Linux, веб-сервер Nginx, база данных MySQL\MariaDB и язык динамического программирования на стороне сервера PHP), которые используются для развертывания динамических веб-приложений и веб-страница.
Из этого руководства вы узнаете, как установить стек LEMP с поддержкой MariaDB 10, PHP 7 и HTTP 2.0 для Nginx . в Ubuntu 16.10 и Ubuntu 16.04 серверных/настольных версиях.
Требования
- Установка Ubuntu 16.04 Server Edition [инструкции также подходят для Ubuntu 16.10]
Шаг 1. Установите веб-сервер Nginx
1. Nginx — это современный и ресурсоэффективный веб-сервер, используемый для отображения веб-страниц посетителям в Интернете. Мы начнем с установки веб-сервера Nginx из официальных репозиториев Ubuntu с помощью командной строки apt.
sudo apt-get install nginx
2. Затем введите команды netstat и systemctl, чтобы убедиться, что Nginx запущен и привязывается к порту 80.
netstat -tlpn
sudo systemctl status nginx.service
Получив подтверждение того, что сервер запущен, вы можете открыть браузер и перейти к IP-адресу вашего сервера или записи DNS, используя протокол HTTP, чтобы посетить веб-страницу Nginx по умолчанию.
http://IP-Address
Шаг 2. Включите протокол Nginx HTTP/2.0.
3. Протокол HTTP/2.0, который по умолчанию встроен в последнюю версию двоичных файлов Nginx в Ubuntu 16.04, работает только в сочетании с SSL и обещает огромное улучшение скорости загрузки веб-страниц SSL.
Чтобы включить протокол в Nginx в Ubuntu 16.04, сначала перейдите к файлам конфигурации доступных сайтов Nginx и создайте резервную копию файла конфигурации по умолчанию, выполнив приведенную ниже команду.
cd /etc/nginx/sites-available/
sudo mv default default.backup
4. Затем с помощью текстового редактора создайте новую страницу по умолчанию, следуя приведенным ниже инструкциям:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/html;
index index.html index.htm index.php;
server_name 192.168.1.13;
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 180m;
resolver 8.8.8.8 8.8.4.4;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
listen [::]:80;
server_name 192.168.1.13;
return 301 https://$server_name$request_uri;
}
Приведенный выше фрагмент конфигурации позволяет использовать HTTP/2.0 путем добавления параметра http2
ко всем директивам прослушивания SSL.
Кроме того, последняя часть отрывка, заключенного в директиве сервера, используется для перенаправления всего трафика, отличного от SSL, на хост SSL/TLS по умолчанию. Кроме того, замените директиву server_name
, чтобы она соответствовала вашему собственному IP-адресу или записи DNS (желательно полное доменное имя).
5. Завершив редактирование файла конфигурации Nginx по умолчанию с указанными выше настройками, сгенерируйте и перечислите файл и ключ сертификата SSL, выполнив приведенные ниже команды.
Заполните сертификат своими собственными настройками и обратите внимание на настройку Общее имя, чтобы она соответствовала вашей записи полного доменного имени DNS или IP-адресу вашего сервера, который будет использоваться для доступа к веб-странице.
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
ls /etc/nginx/ssl/
6. Кроме того, создайте надежный шифр DH, который был изменен в приведенном выше файле конфигурации в строке инструкции ssl_dhparam
, выполнив следующую команду:
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
7. После создания ключа Diffie-Hellman проверьте, правильно ли написан файл конфигурации Nginx и может ли он быть применен веб-сервером Nginx, и перезапустите демон, чтобы отразить изменения, выполнив приведенные ниже команды.
sudo nginx -t
sudo systemctl restart nginx.service
8. Чтобы проверить, использует ли Nginx протокол HTTP/2.0, выполните приведенную ниже команду. Наличие объявленного протокола h2
подтверждает, что Nginx успешно настроен для использования протокола HTTP/2.0. Все современные браузеры должны поддерживать этот протокол по умолчанию.
openssl s_client -connect localhost:443 -nextprotoneg ''
Шаг 3. Установите интерпретатор PHP 7.
Nginx можно использовать с интерпретатором языка динамической обработки PHP для создания динамического веб-контента с помощью диспетчера процессов FastCGI, полученного путем установки двоичного пакета php-fpm из официальных репозиториев Ubuntu.
9. Чтобы получить PHP7.0 и дополнительные пакеты, которые позволят PHP взаимодействовать с веб-сервером Nginx, введите следующую команду в консоли вашего сервера:
sudo apt install php7.0 php7.0-fpm
10. После успешной установки интерпретатора PHP7.0 на ваш компьютер запустите и проверьте демон php7.0-fpm, выполнив следующую команду: команда:
sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm
11. Текущий файл конфигурации Nginx уже настроен на использование диспетчера процессов PHP FastCGI для серверного динамического контента.
Серверный блок, который позволяет Nginx использовать интерпретатор PHP, представлен в приведенном ниже фрагменте, поэтому никаких дальнейших изменений файла конфигурации Nginx по умолчанию не требуется.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Ниже приведен снимок экрана с инструкциями, которые необходимо раскомментировать и изменить, в случае исходного файла конфигурации Nginx по умолчанию.
12. Чтобы проверить связь веб-сервера Nginx с диспетчером процессов PHP FastCGI, создайте тестовый файл конфигурации PHP info.php
, введя приведенную ниже команду, и проверьте настройки, посетив этот файл конфигурации. используя следующий адрес: http://IP_или домен/info.php
.
sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'
Также проверьте, объявлен ли сервером протокол HTTP/2.0, найдя строку $_SERVER[’SERVER_PROTOCOL’]
в блоке переменных PHP, как показано на снимке экрана ниже.
13. Чтобы установить дополнительные модули PHP7.0, используйте команду apt search php7.0
, чтобы найти модуль PHP и установить его.
Также попробуйте установить следующие модули PHP, которые могут пригодиться, если вы планируете установить WordPress или другую CMS.
sudo apt install php7.0-mcrypt php7.0-mbstring
14. Чтобы зарегистрировать дополнительные модули PHP, просто перезапустите демон PHP-FPM, выполнив приведенную ниже команду.
sudo systemctl restart php7.0-fpm.service
Шаг 4. Установите базу данных MariaDB.
15. Наконец, чтобы завершить наш стек LEMP, нам нужен компонент базы данных MariaDB для хранения данных веб-сайта и управления ими.
Установите систему управления базой данных MariaDB, выполнив приведенную ниже команду, и перезапустите службу PHP-FPM, чтобы использовать модуль MySQL для доступа к базе данных.
sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service
16. Чтобы защитить установку MariaDB, запустите сценарий безопасности, предоставленный двоичным пакетом из репозиториев Ubuntu, который попросит вас установить пароль root, удалить анонимных пользователей, удаленно отключить вход с правами root и удалить тестовую базу данных.
Запустите сценарий, введя приведенную ниже команду, и ответьте на все вопросы yes
. Используйте скриншот ниже в качестве руководства.
sudo mysql_secure_installation
17. Чтобы настроить MariaDB так, чтобы обычные пользователи могли получить доступ к базе данных без системных привилегий sudo, перейдите в интерфейс командной строки MySQL с правами root и выполните следующие команды в интерпретаторе MySQL:
sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit
Наконец, войдите в базу данных MariaDB и запустите произвольную команду без привилегий root, выполнив следующую команду:
mysql -u root -p -e 'show databases'
Все это! Теперь у вас есть стек LEMP, настроенный на серверах Ubuntu 16.10 и Ubuntu 16.04, который позволяет развертывать сложные динамические веб-приложения, способные взаимодействовать с базами данных.