zaLinux.ru

Как установить Nginx, MySQL, PHP в Ubuntu 16.10 или 17.04


Nginx – это один из самых популярных веб-серверов в мире, он используется для хостинга некоторыми самыми большими и самыми нагруженными трафиком сайтами в Интернете. В большинстве случаев он является более дружественным к ресурсам чем Apache и может использоваться как веб-сервер или обратный прокси-сервер.

Программный стек LEMP – это группа программного обеспечения, которое может использоваться для обслуживания динамических веб-страниц и веб-приложений. Это акроним, которые описывает операционную систему Linux с веб-сервером Nginx. Данные приложений и сайтов хранятся в базе данных MySQL, а за обработку и генерацию динамической составляющей отвечает PHP.

В этой инструкции будет продемонстрировано, как установить LEMP сек на сервер Ubuntu 16.10 или 17.04.

Шаг 1: Установка веб-сервера Nginx

Для отображения веб-страниц наших посетителям, мы задействуем Nginx, современный веб-сервер.

Всё программное обеспечение, используемое в этом мануале, имеется в стандартных репозиториях пакетов Ubuntu. Это означает, что на всём процессе установки мы будем использовать менеджер пакетов apt.

Обновим локальный индекс пакетов, если это не делалось ранее. Затем мы можем установить сервер:

sudo apt-get update
sudo apt-get install nginx

На Ubuntu 16.10 или 17.04 Nginx настроен на автоматический запуск после установки.

Если у вас запущен файервол ufw, вам нужно разрешить соединения для Nginx. В процессе установки Nginx регистрирует сам себя в ufw, поэтому процедура довольно тревиальна.

Рекомендуется, чтобы вы включили самый ограничивающий профиль, который всё равно позволяет трафик, который вы хотите. Поскольку мы ещё не настроили SSL на нашем сервере, в этой инструкции нам нужно разрешить трафик только на порту 80.

Вы можете включить это набрав:

sudo ufw allow 'Nginx HTTP'

Вы можете проверить изменения введя:

sudo ufw status

В отображаемом выводе вы должны увидеть, что HTTP трафик разрешён:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

С новым добавленным правилом файервола, вы можете проверить в веб-браузере, работает ли выеб-сервер и доступен ли он по доменному имени или по внешнему IP адресу.

Если вы настраиваете веб-сервер на домашнем компьютере, то перейдите по адресу http://localhost/, если на удалённом компьютере, то наберите в строке браузера IP адрес вашего сервера.

Свой внешний IP адрес можно узнать так:

curl suip.biz/ip/

Ещё один вариант узнать свой IP адрес без задействования внешних сервисов:

ip addr show enp0s3 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

При открытии http://домен_сервера_или_IP вы должны увидеть:

Если вы видите страницу, как показано выше, значит вы успешно установили Nginx.

Шаг 2: Установка MySQL для управления данными веб-сайта

Теперь, когда у нас есть веб-сервер, нам нужно установить MySQL, систему управления базами данных, для сохранения и работы с данными нашего сайта и веб-приложений.


Установка проста и выполняется следующей командой:

sudo apt-get install mysql-server

У вас спросят, хотите ли вы установить пароль рута (администратора) MySQL:

Теперь MySQL – программа для управления базами данных, установлена, но её настройка ещё не завершена до конца.

Чтобы сделать её более безопасной, вы можете запустить простой скрипт, который будет вас спрашивать, хотите ли вы изменить некоторые небезопасные настройки, используемые по умолчанию. Для запуска скрипта наберите:

sudo mysql_secure_installation

Первая надпись:

Enter password for user root:

У вас просит пароль, который вы установили для root аккаунта MySQL. Если вы не устанавливали пароль, то нажмите Enter.

Далее мы видим:

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Перевод:

Для тестирования пароля и улучшения безопасности может использоваться VALIDATE PASSWORD PLUGIN (плагин проверки пароля). Он проверяет стойкость пароля и позволяет пользователю установить только достаточно безопасные пароли, хотите ли вы использовать VALIDATE PASSWORD plugin?


Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет):

Внимание: перед включением этой функции вы должны чётко понимать, что она делает и включать её только если вы действительно этого хотите. При её включении пароли, которые не удовлетворяют определённым критериям, будут отвергнуты MySQL с ошибкой. Это приведёт к проблеме, если вы используете слабый пароль с программным обеспечением, которое автоматически настраивает учётные данные пользователя MySQL, таким как Ubuntu пакетами для phpMyAdmin. Это безопасно не включать валидацию, но вам следует всегда использовать стойкие, уникальные пароли в качестве учётных данных.  Расценивайте доступ к базе данных как доступ ко всему серверу.

Если вы включили валидацию, то вас попросят выбрать уровень проверки пароля:

here are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Перевод:

Имеется несколько уровней проверки паролей:

LOW    Длина >= 8
MEDIUM Длина >= 8, цифры, смешанный регистр и специальные символы
STRONG Длина >= 8, цифры, смешанный регистр, специальные символы и файл словаря

Пожалуйста введите 0 = LOW, 1 = MEDIUM и 2 = STRONG: 1

 Помните, что если вы выбрали второй, самый сильный уровень, вы будете получать ошибки при попытках установить пароль, которые не содержит цифры, буквы верхнего и нижнего регистра и специальные символы, или который основывается на распространённых словарных словах.

Если вы включили проверку пароля, вы увидите показатель силы пароля для существующего пароля рута и запрос, хотите ли вы изменить этот пароль, если ваш пароль устраивает вас, то нажмите n (Нет) в строке запроса:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Далее

Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

Перевод:

Использование существующего пароля для рут.

Изменить пароль для рута? ((Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет)):

Если вы выберите Да, то вам нужно будет ввести новый пароль, а затем ввести его ещё раз для подтверждения.

Далее:

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Перевод:

По умолчанию, установленная MySQL имеет анонимного пользователя, позволяющего любому войти в MySQL не имя созданного для него пользовательского аккаунта. Это сделано только для тестирования и более гладкой установки. Вам следует удалить его перед перенесением в рабочее окружение.

Удалить анонимного пользователя? (Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет)) :

Теперь:

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Перевод:

Обычно руту должно быть позволено подключаться только с 'localhost'. Это гарантирует, что кто-то другой из сети не сможет угадать пароль рута.

Отключить удалённый вход рута? (Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет)) :


Далее

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Перевод:

По умолчанию MySQL поставляется с базой данных под названием 'test', к которой кто-угодно может иметь доступ. Она также предназначена только для тестирования и должна быть удалена перед переходом в рабочее окружение.

Удалить базу данных test и доступ к ней? (Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет)) :

Следующее сообщение:

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

Перевод:

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

Перезагрузить таблицу привилегий сейчас? (Нажмите y|Y для Yes (Да), или любую другую клавишу для No (Нет)) :


Шаг 3: Установка PHP

Теперь у нас есть установленный Nginx, для обслуживания наших страниц и установленная MySQL для хранения и управления нашей информацией. Тем не менее, у нас до сих пор нет ничего для создания динамичного контента. Для этого мы можем использовать PHP.

Поскольку Nginx не имеет родных модулей для работы с PHP какие имеют некоторые другие веб-серверы, нам понадобится установить php-fpm, что означает "fastCGI process manager". Мы скажем Nginx передавать для обработки PHP запросы этой программе.

Мы можем установить этот модуль и забрать дополнительные пакеты-помощники, которые позволят PHP общаться с нашей базой данных. Установка подтянет необходимые файлы PHP ядра. Это делается командой:

sudo apt-get install php-fpm php-mysql vim

Настройка PHP Processor

Теперь, когда наши компоненты PHP установлены, нам нужно сделать небольшую настройку, чтобы сделать нашу систему более безопасной.

С привилегиями рута откройте главный конфигурационный файл php-fpm:

sudo vim /etc/php/7.0/fpm/php.ini

В этом файле мы ищем параметр, которые устанавливает cgi.fix_pathinfo. Он будет закомментирован точкой с запятой (;) и по умолчанию установлен в "1".

Это крайне важная настройка с точки зрения безопасности, поскольку она говорит PHP пытаться выполнить ближайший файл, который он может найти если запрашиваемый PHP файл не может быть найден. Проще говоря, позволит пользователю составить PHP запрос таким образом, что позволит ему выполнить скрипт, на выполнение которого у него не должно быть разрешений.

Мы изменим оба эти условия, раскомментировав строку и установив значение на "0", получится так:

cgi.fix_pathinfo=0

Когда закончите, сохраните и закройте этот файл.

Теперь мы просто перезапускаем наш PHP processor:

sudo systemctl restart php7.0-fpm

Это приведёт к применению изменений, который мы сделали.

Шаг 4: Настройка Nginx для использования PHP Processor

Теперь у нас установлены все необходимые компоненты. Но нам ещё нужно настроить Nginx, чтобы он использовал PHP processor для динамичного содержимого.

Мы делаем это на уровне блока сервера (блоки сервера это как виртуальные хосты в Apache). Откройте стандартный файл конфигурации блоков сервера Nginx:

sudo vim /etc/nginx/sites-available/default

В настоящее время, если удалить комментарии, стандартный блок сервера Nginx выглядит примерно так:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

В этом файле для нашего сайта нам нужно сделать некоторые изменения.

  • Для начала нам нужно добавить index.php в качестве первого значения нашей директивы index, чтобы файлы с названием index.php обрабатывались, когда запрошена директория.
  • Мы можем изменить директиву server_name для указания на доменное имя нашего сервера или на внешний IP адрес.
  • Для обработки PHP нам нужно просто раскомментировать сегмент, который отвечает за PHP запросы. Это блок location ~\.php$, включая сниппет fastcgi-php.conf и ассоциированный с php-fpm сокет.
  • Мы раскомментируем блок location по работе с .htaccess файлами. Nginx не работает с этими файлами. Если так случиться, что какие-либо из них попадут в корень документов, они будут доступны для посетителей.

После изменений рассмоменированные строки выглядят так:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name домен_сервера_или_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

После того, как вы сделали указанные выше изменения, сохраните и закройте этот файл.

Проверьте синтаксис файла конфигурации командой:

sudo nginx -t

Если будет сообщено о каких-либо ошибках, перед тем как продолжить вернитесь и перепроверьте ваш файл.

Когда вы готовы, перезагрузите Nginx, чтобы изменения вступили в силу:

sudo systemctl reload nginx

Шаг 5: Создание тестовогоa PHP для проверки правильности настройки

Ваш стек LEMP теперь должен быть полностью настроен. Мы можем протестировать его, для проверки, что Nginx может корректно обрабатывать файлы .php в нашем PHP процессоре.

Вы можете сделать это создав тестовый PHP файл в коревой директории документов. В текстовом редакторе откройте новый файл под названием info.php внутри вашей корневой директории документов:

sudo vim /var/www/html/info.php

В новый файл наберите или скопируйте следующие сроки. Это правильный PHP код, который возвращает информацию о сервере:

<?php
phpinfo();

Когда закончите, сохраните и закройте файл.

Теперь вы можете в вашем веб-браузере открыть этот файл вашего сервера, указав доменное имя или внешний IP адрес, перейдите на страницу /info.phphttp://имя_домена_или_IP/info.php

Вы должны увидеть веб-страницу, сгенерированную PHP, на ней будет информация о вашем сервере:

Если вы видите страницу подобную приведённой выше, значит вы успешно настроили работу PHP с Nginx.

После проверки, что Nginx правильно отображает страницу, будет правильным удалить файл, который вы создали, поскольку он может дать неуполномоченным пользователям некоторые подсказки о конфигурации вашего сервера, это может помочим им его взломать. Вы всегда можете снова создать этот файл позднее.

А сейчас мы его удаляем следующей командой:

sudo rm /var/www/html/info.php

Шаг 6: Управление процессами Nginx

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

Для остановки вашего веб-сервера вы можете набрать:

sudo systemctl stop nginx

Для запуска вашего сервера, если он был остановлен:

sudo systemctl start nginx

Для остановки, а затем запуска веб-сервера (перезапуск):

sudo systemctl restart nginx

Если вы сделали изменения в конфигурации, часто Nginx может перезагружаться без обрыва подключения. Для этого используется следующая команда:

sudo systemctl reload nginx

По умолчанию Nginx настроен запускаться вместе с загрузкой сервера. Если вы этого не хотите, вы можете отключить это поведение набрав:

sudo systemctl disable nginx

Чтобы заново включить автозагрузку сервера при старте системы, наберите:

sudo systemctl enable nginx

Шаг 7: Знакомство с важными файлами и директориями Nginx

Теперь, когда вы знаете как управлять самим сервером, вам следует уделить несколько минут для ознакомления с несколькими важными директориями и файлами.

Файлы сайтов в Nginx

  • /var/www/html: Веб-контент, показываемый пользователю, который по умолчанию состоит из стандартной страницы Nginx, видимой нами ранее, расположен в директории /var/www/html. Она может быть изменена в конфигурационных файлах Nginx.

Файлы конфигурации Nginx

  • /etc/nginx: Конфигурационная директория nginx. Здесь живут все конфигурационные файлы Nginx.
  • /etc/nginx/nginx.conf: Главный конфигурационный файл Nginx. Он может быть изменён для внесения изменений в глобальную конфигурацию Nginx.
  • /etc/nginx/sites-available: Это директория, где могут храниться «серверные блоки» с настройками сайтов. Nginx не использует конфигурационные файлы, найденные в этой директории, если на них не сделана ссылка из директории sites-enabled (смотрите ниже). Обычно, все серверные блоки конфигурации делаются в этой директории, а затем подключаются созданием ссылки на эту директорию.
  • /etc/nginx/sites-enabled/: Это директория, где размещаются «серверные блоки» - конфигурации веб-сайтов. Обычно, здесь располагаются не сами файлы с настройками, а ссылки на настоящие файлы конфигураций в директории sites-available. Nginx использует файлы и ссылки из этой директории.
  • /etc/nginx/snippets: Эта директория содержит фрагменты конфигураций, которые могут быть включены в конфигурацию Nginx в другом месте. Потенциально повторяемые сегменты настройки являются хорошими кандидатами для рефакторинга их в сниппеты.

Логи сервера

  • /var/log/nginx/access.log: Каждый запрос к вашему серверу записывается в этот файл журнала, если Nginx не настроен делать по-другому.
  • /var/log/nginx/error.log: Все ошибки Nginx будут записаны в этот лог.

Заключение

Теперь у вас есть установленный и настроенный ваш веб-сервер. Это даёт вам очень гибкую платформу, чтобы делиться веб-контентом с вашими посетителями.


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *