Как установить Nginx в Ubuntu 18.04



1: Установка Apache и PHP-FPM



Сначала нужно установить Apache и PHP-FPM. Также для работы понадобится модуль Apache для PHP FastCGI под названием libapache2-mod-fastcgi.

Обновите индекс пакетов:

sudo apt update

Установите необходимые программы:

sudo apt install apache2 php-fpm


Настройка Apache

После установке apache перейдем к его настройке. Откроем конфигурационный файл:

sudo nano /etc/apache2/apache2.conf

Что бы при перезагрузке Apache не выдавал ошибку добавим в начале файла секцию:

ServerName 127.0.1.1

А также секцию directory, если конечно Вы решили разместить свой сайт в нестандартной директории (например в директории /home/www/html). Добавляем либо до, либо после предыдущих секций directory

<Directory /home/www/html> 
 Options Indexes FollowSymLinks
 AllowOverride None 
 Require all granted 
</Directory>

Далее открываем файл ports.conf командой:

sudo nano /etc/apache2/ports.conf

И меняем порт 80 например на 8080, а порт 443 на порт 444. Вот как у меня:
Listen 8080

<IfModule ssl_module>
 Listen 444
</IfModule>
 <IfModule mod_gnutls.c>
 Listen 444
</IfModule>
Далее добавляем конфигурационный файл своего сайта командой если он у Вас без поддержки SSL:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ваш_сайт.conf

если же планируете построить сайт на протоколе https, то добавьте еще и файл командой:

sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/ваш_сайт-ssl.conf

Откроем файл на редактирование. В первом случае

sudo nano /etc/apache2/sites-available/ваш_сайт.conf

И внесем изменения как у меня:
<VirtualHost *:8080>
              ServerName ваш_сайт.ru
              ServerAlias www.ваш_сайт.ru *.ваш_сайт.ru 
              ServerAdmin webmaster@ваш_сайт.ru 
              #Redirect / https://ваш_сайт.ru/ # Раскомментируйте строку если Ваш сайт будет с поддержкой SSL
              <Directory /home/www/html/ваш_сайт.ru/> 
              AllowOverride All 
              </Directory> 
              DocumentRoot /home/www/html/ваш_сайт.ru 
              ErrorLog ${APACHE_LOG_DIR}/error.log 
              CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost>

Во втором случае с поддержкой SSL раскомментируйте в первом варианте директиву Redirectи открываем второй файл на редактирование

sudo nano /etc/apache2/sites-available/ваш_сайт-ssl.conf

И внесем изменения:

<IfModule mod_ssl.c> 
             <VirtualHost *:444> 
             ServerName ваш_сайт.ru 
             ServerAdmin webmaster@ваш_сайт.ru 
             ServerAlias *.ваш_сайт.ru 
             DocumentRoot /home/www/html/ваш_сайт.ru 
             ErrorLog ${APACHE_LOG_DIR}/error.log 
             CustomLog ${APACHE_LOG_DIR}/access.log combined 
             SSLEngine on 
             SSLProtocol all -SSLv2 
             SSLCertificateFile /etc/apache2/ssl/ваш_сайт.crt 
            SSLCertificateKeyFile /etc/apache2/ssl/ваш_сайт.key  
            SSLCACertificateFile /etc/apache2/ssl/ca.crt 
             <FilesMatch "\.(cgi|shtml|phtml|php)$"> 
             SSLOptions +StdEnvVars 
             </FilesMatch> 
             <Directory /home/www/html/ваш_сайт.ru/> 
             SSLOptions +StdEnvVars 
             Options Indexes FollowSymLinks MultiViews 
             AllowOverride All 
             Order allow,deny 
             allow from all 
 </Directory> 
 </VirtualHost>


Как приобрести SSL сертификаты в этой статье я описывать не буду

Настройка Nginx

Пришло время отредактировать конфиг nginx. Набираем в терминале:
sudo nano /etc/nginx/nginx.conf
Приводим его к следующему виду:
user nginx;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
worker_rlimit_nofile 80000;

events {
worker_connections 2048;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] $status ‘
‘»$request» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;

# немного тюнинга
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 65;

# включим сжатие данных до отправки
gzip on;
gzip_static on;
gzip_vary on;
gzip_min_length 1100;
gzip_buffers 64 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_types text/plain application/xml application/x-javascript text/javascript text/css text/xml application/xml+rss application/json;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

# Подключаем директорию для всех наших конфигов
include /etc/nginx/conf.d/*.conf;
}
Далее в директории conf.d создадим конфигурационный файл нашего сайта без поддержи SSL
sudo touch /etc/nginx/conf.d/ваш_сайт.conf
Содержимое файла
server {
        listen       *:80;
        server_name  ваш_сайт.ru www.ваш_сайт.ru;
        server_name_in_redirect off;
        access_log  /var/log/nginx/host.access.log  main;

        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|js)$ {
        root /home/www/html/ваш_сайт.ru;
        index  index.php;
        }

        location / {
        proxy_pass   http://127.0.0.1:8080;
        }

        location ~ /\.ht {
        deny  all;
        }
}
И с поддержкой SSl
sudo touch /etc/nginx/conf.d/ваш_сайт-ssl.conf
Содержимое файла
upstream websocket {
  server ваш_сайт.ru:444;
}

server {
        listen  *:443;
        server_name ваш_сайт.ru *.ваш_сайт.ru;
        access_log  /var/log/nginx/host.access.log  main;

        location / {
        proxy_pass   https://127.0.0.1:444;
        }

        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|js)$ {
        root /home/www/html/ваш_сайт.ru;
        index  index.php index.html;
        }

        location ~ /\.ht {
        deny  all;
        }

        ssl on;
        ssl_certificate /etc/nginx/ssl/ваш_сайт.crt;
        ssl_certificate_key /etc/nginx/ssl/ваш_сайт.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
        ssl_prefer_server_ciphers on;

        # see http://nginx.com/blog/improve-seo-https-nginx/
        ssl_session_cache shared:SSL:100m;
        ssl_session_timeout 12h;
}
Также создадим еще один файл назовем его proxy.conf
sudo touch /etc/nginx/conf.d/proxy.conf
Открываем и редактируем как у меня:
sudo nano /etc/nginx/conf.d/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

Установка модуля RPAF

Т.к. теперь все запросы к Apache приходят не от удалённых клиентов, а от Nginx, то в итоге IP-адрес клиента Apache определяет как локальный (127.0.0.1). Для решения этой проблемы нам нужен модуль RPAF. Он берет тело заголовка X-Forwarded-For, присланного от фронтенда (Nginx) и заменяет значение заголовка REMOTE_ADDR на бекенде (Apache).
sudo apt install libapache2-mod-rpaf && a2enmod rpaf

Настройка модуля RPAF

Файл конфигурации RPAF находится по пути /etc/apache2/mods-enabled/rpaf.conf Откроем его:
sudo nano /etc/apache2/mods-enabled/rpaf.conf
Он должен содержать следующие строки:
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP
Ну все теперь остается только перезапустить наш apache и nginx
sudo /etc/init.d/apache2 restart && sudo /etc/init.d/nginx restart
Теперь Nginx работает как фронтенд, а Apache как бэкенд.




Введение



Nginx является одним из самых популярных веб-серверов в мире, его используют для хостинга самых больших и нагруженных сайтов в Интернете. Nginx в подавляющем большинстве случаев менее требователен к ресурсам, чем Apache; его можно использовать как в качестве веб-сервера, так и в качестве обратного прокси-сервера (reverse proxy).


В этом руководстве мы рассмотрим процесс установки Nginx на ваш сервер с Ubuntu 18.04.

Перед установкой



Перед тем, как начать следовать описанным в этой статье шагам, убедитесь, что у вас есть обычный не-рутовый (non-root) пользователь с привилегиями sudo. Узнать, как настроить такого пользователя на вашем сервере, можно из статьи о первичной настройке сервера на Ubuntu 18.04.


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

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



Nginx доступен в стандартных репозиториях Ubuntu, поэтому мы можем использовать менеджер пакетов apt для его установки.


Поскольку мы собираемся использовать apt в первый раз в ходе этой сессии, начнём с обновления локального списка пакетов. Далее установим nginx:
sudo apt update
sudo apt install nginx



В результате выполнения этих команд apt установит Nginx и другие необходимые для его работы пакеты на ваш сервер.

Шаг 2 - Настройка файрвола



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


Для вывода настроек доступа для приложений, зарегистрированных в ufw, введём команду:
sudo ufw app list



В результате выполнения этой команды будет выведен список профилей приложений:


Вывод Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH



Как видно из этого вывода, для Nginx настроено три профиля:
Nginx Full: этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL).
Nginx HTTP: этот профиль открывает только порт 80 (обычный, не шифрованный веб-трафик).
Nginx HTTPS: этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL).


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


Сделать это можно следующей командой:
sudo ufw allow 'Nginx HTTP'



Вы можете проверить изменения введя команду:
sudo ufw status



В результате должен отобразиться вывод следующего вида:


Вывод Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)


Шаг 3 - Проверка работы веб-сервера



После завершения процесса установки Ubuntu 18.04 запустит Nginx автоматически. Таким образом веб-сервер уже должен быть запущен.


Мы можем убедиться в этом выполнив следующую команду:
systemctl status nginx



Вывод ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process



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


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


Попробуйте набрать эту команду в терминале вашего сервера:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'



В результате будет выведено несколько IP адресов. Попробуйте вставить каждый из них в браузер.


Другим способом определить свой IP адрес будет проверка, как ваш сервер виден из Интернета:
curl -4 icanhazip.com



Наберите полученный IP адрес или доменное имя в вашем веб-браузере. http://IP_адрес_вашего_сервера



Вы должны увидеть страницу Nginx по умолчанию.





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

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



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


Для остановки веб-сервера используйте команду:
sudo systemctl stop nginx



Для запуска остановленного веб-сервера наберите:
sudo systemctl start nginx



Для перезапуска веб-сервера можно использовать следующую команду:
sudo systemctl restart nginx



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



По умолчанию Nginx настроен на автоматический старт при запуске сервера. Если такое поведение веб-сервера вам не нужно, вы можете отключить его следующей командой:
sudo systemctl disable nginx



Для повторного включения запуска Nginx при старте сервера введите:
sudo systemctl enable nginx


Шаг 5 - Настройка серверных блоков (рекомендуется)



При работе с Nginx серверный блоки (аналог виртуальных хостов в Apache) используются для инкапсуляции настроек сайтов и позволяют хостить более одного домена на сервере. Мы рассмотрим настройку серверных блоков на примере example.com, но вам будет необходимо заменить этот домен своим реальным доменным именем. Узнать больше о настройке доменных имён в DigitalOcean вы можете из нашего руководства Введение в DNS DigitalOcean.


Nginx для Ubuntu 18.04 уже настроен для поддержки одного серверного блока, который настроен на показ документов из директории /var/www/html. Несмотря на то, что это работает для одного сайта, это не очень удобно для хостинга нескольких сайтов. Вместо того, чтобы менять /var/www/html создадим новую структуру директорий внутри /var/www/ для нашего сайта example.com. Директорию /var/www/html оставим без изменений, её содержимое будет отображаться, если клиентские запросы не подходят для отображения других настроенных на сервере сайтов.


Создадим директорию для example.com следующей командой, используя флаг -p для создания любых необходимых родительских директорий:
sudo mkdir -p /var/www/example.com/html



Далее настроим права доступа для созданной директории для текущего пользователя, используя переменную окружения $USER:
sudo chown -R $USER:$USER /var/www/example.com/html



Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение umask. На всяких случай мы можем удостовериться в этом командой:
sudo chmod -R 755 /var/www/example.com



Далее создадим страницу index.html в nano или любом другом текстовом редакторе:
nano /var/www/example.com/html/index.html



Добавим в файл следующий HTML:


/var/www/example.com/html/index.html <html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com server block is working!</h1> </body> </html>



Сохраните и закройте файл.


Для того, чтобы Nginx мог отдавать этот контент, нам необходимо настроить серверный блок. Вместо того, чтобы редактировать существующий файл конфигурации серверного блока, создадим новый файл для нашего сайта - /etc/nginx/sites-available/example.com:
sudo nano /etc/nginx/sites-available/example.com



Скопируйте следующий текст настроек серверного блока в созданный файл:


/etc/nginx/sites-available/example.com server { listen 80; listen [::]:80; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } }



Обратите внимание на то, что мы изменили конфигурацию root на адрес нашей новой директории, а server_name на наше доменное имя.


Теперь активируем файл путём создания ссылки на него в директории sites-enabled, которую Nginx проверяет при старте:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/



Теперь два серверных блока активированы и настроены для ответа на основании своих директив listen и server_name (вы можете узнать больше о том, как Nginx обрабатывает эти директивы вот тут):
example.com: Будет отвечать на запросы example.com и www.example.com.
default: Будет отвечать на любые запросы на порту 80, которые не соответствуют другим настроенным блокам.


Для того, чтобы избежать потенциальной проблемы hash bucket memory, которая может появиться при добавлении дополнительных имён серверов, нам необходимо изменить одно значение в файле /etc/nginx/nginx.conf. Откройте файл командой:
sudo nano /etc/nginx/nginx.conf



Найдите директиву server_names_hash_bucket_size и удалите символ # для того, чтобы раскомментировать её:


/etc/nginx/nginx.conf ... http { ... server_names_hash_bucket_size 64; ... } ...



Далее проверим файлы Nginx на наличие синтаксических ошибок:
sudo nginx -t



Сохраните и закройте файл.


Если никаких проблем не обнаружилось, перезапустите Nginx для применения внесённых изменений:
sudo systemctl restart nginx



Теперь Nginx должен корректно обрабатывать ваше новое доменное имя. Вы можете убедиться в этом набрав в браузере http://example.com и увидев что-то вроде такого вывода:




Шаг 6 - Важные файлы и директории Nginx



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

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

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

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

Заключение



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


Если вы хотите использовать более полный стек приложений, рекомендуем ознакомиться с нашим руководством по настройке стека LEMP на сервере с Ubuntu 18.04.




Шаг 2 - Установка MySQL



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


Мы можем вновь использовать apt для загрузки и установки программного обеспечения:
sudo apt install mysql-server



Обратите внимание: В данном случае вам нет необходимости предварительно выполнять команду sudo apt update, т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем компьютере уже должен быть обновлен.


Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y для продолжения установки.


После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:
sudo mysql_secure_installation



В результате выполнения этой команды вам будет предложено настроить плагин валидации паролей (VALIDATE PASSWORD PLUGIN).


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


Введите Y для включения плагина или что-нибудь другое для продолжения без его включения: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:



Если вы включили валидацию паролей, вам будет предложено установить уровень надёжности паролей при валидации. Имейте в виду, что при выборе значения 2 (самый строгий уровень валидации), вы будете получать ошибки при попытке задать пароль без цифр, букв в верхнем и нижнем регистре, а также без специальных символов, а также при попытке использовать пароль, основанный на распространённых словах, которые уязвимы для подбора паролей по словарю.There 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



Вне зависимости от того, включили вы плагин валидации паролей или нет, далее вам будет предложено задать пароль для пользователя root для MySQL. Это административный аккаунт пользователя в MySQL, который имеет повышенные привилегии. Вы можете рассматривать его, как аналог пользователя root для самого сервера (с той лишь разницей, что это аккаунт для MySQL). Задайте сильный уникальный пароль, не оставляйте пароль пустым.


Если вы включили валидацию паролей, вам будет показан уровень надёжности заданного вами ранее пароля root пользователя, а также вам будет предложено изменить этот пароль. Если вы не хотите менять пароль, введите N или "no":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



На все последующие вопросы просто вводите Y и нажимайте клавишу ENTER для выбора настроек по умолчанию. При этом удалятся некоторые тестовые пользователи и базы данных, будет отключена возможность удаленного доступа с учетной записью root-пользователя, и все изменения будут немедленно применены в MySQL.


Обратите внимание на то, что на серверах Ubuntu, использующих MySQL 5.7 (и более поздние версии), root пользователь в MySQL настроен таким образом, что его аутентификация по умолчанию происходит с помощью плагина auth_socket, а не с помощью пароля. Это во многих случаях повышает безопасность, но, в то же время, может усложнить настройку доступа к rootпользователю для некоторых программ (например, phpMyAdmin).


Если вы хотите настроить root пользователя на использование пароля, вам необходимо изменить метод аутентификации с auth_socket на mysql_native_password. Для того, чтобы это сделать, войдите в оболочку MySQL в терминале:
sudo mysql



Далее просмотрите метод аутентификации для каждого из ваших пользователей MySQL с помощью следующей команды:
SELECT user,authentication_string,plugin,host FROM mysql.user;



Вывод +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)



В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER. Не забудьте изменить password на ваш сильный пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';



Далее выполните команду FLUSH PRIVILEGES, которая применит внесённые изменения:
FLUSH PRIVILEGES;



Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации:
SELECT user,authentication_string,plugin,host FROM mysql.user;



Вывод +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)



Как можно видеть на представленном выводе теперь root пользователь MySQL аутентифицируется с использованием пароля. После того, как мы в этом убедились, можно выйти из оболочки MySQL:
exit



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

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



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


Мы можем вновь воспользоваться менеджером пакетов apt для установки компонентов. Мы также добавим некоторые вспомогательные пакеты, чтобы код на PHP мог работать с нашим сервером Apache, а также обращаться к базе данных MySQL:
sudo apt install php libapache2-mod-php php-mysql



Данная команда должна установить PHP без каких либо проблем. Вскоре мы это проверим.


В большинстве случаев, мы захотим изменить способ, который Apache использует для поиска файлов при запросе директории. На данный момент, если пользователь запрашивает директорию с сервера, Apache в первую очередь будет искать файл с названием index.html. Мы хотим, чтобы наш веб-сервер отдавал предпочтение PHP файлам, так что мы настроим Apache таким образом, чтобы сначала он искал файлы index.php.


Для этого введите следующую команду, чтобы открыть файл dir.conf в текстовом редакторе с привилегиями пользователя root:
sudo nano /etc/apache2/mods-enabled/dir.conf



Содержимое файла будет выглядеть следующим образом:


/etc/apache2/mods-enabled/dir.conf<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule>



Мы хотим переместить индексный файл PHP index.php, выделенный выше, на первое место после спецификации DirectoryIndex следующим образом:


/etc/apache2/mods-enabled/dir.conf<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule>



После внесения правок сохраните и закройте файл сочетанием клавиш CTRL-X. Вам придется подтвердить операцию вводом Y и затем нажатием клавиши ENTER для подтверждения места сохранения файла.


После этого нам необходимо перезапустить Apache для применения внесенных изменений. Вы можете сделать это при помощи команды:
sudo systemctl restart apache2



Мы также можем проверить статус сервиса apache2 используя systemctl:
sudo systemctl status apache2



Пример Вывода ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start



Чтобы расширить функциональность PHP, мы можем установить некоторые дополнительные модули. Для просмотра доступных опций для модулей и библиотек PHP вы можете передать результат apt search в less, которая позволит вам проматывать вывод:
apt search php- | less



Используйте клавиши стрелок вверх и вниз для проматывания списка, для выхода нажмите Q.


В результате вам будут показаны все опциональные компоненты, которые можно установить, сопровождаемые кратким описанием для каждого:bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphs bluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software development cacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systems ganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-end golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Go haserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environments kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n ... :



Чтобы получить больше информации по каждому модулю, вы можете поискать в Интернете или посмотреть полное описание пакета при помощи команды:
apt show package_name



Ответ будет содержать много текста, среди которого есть поле Description. Именно оно и будет содержать расширенное описание функциональности, предоставляемой модулем.


Например, чтобы узнать назначение модуля php-cli, мы можем выполнить команду:
apt show php-cli



Помимо большого количества прочей информации, вы увидите следующее:


Вывод ... Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2). ...



Если после изучение вы решили, что хотите установить пакет, вы можете сделать это используя команду apt install как мы делали ранее при установке другого программного обеспечения.


Если мы решили, что хотим установить php-cli, мы можем ввести команду:
sudo apt install php-cli



Для установки сразу нескольких модулей, вы можете перечислить их через пробелы следом за командой apt install следующим образом:
sudo apt install package1 package2 ...



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

Шаг 4 - Тестирование работы PHP на вашем веб-сервере



Чтобы проверить, что наша система сконфигурирована должным образом, мы можем создать простой PHP скрипт. Назовём этот скрипт info.php. Чтобы Apache нашел и обработал файл корректно, он должен быть сохранен в специальной директории, которая называется "web root".


В Ubuntu 18.04 данная директория находится по адресу /var/www/html/. Мы можем создать там файл введя следующую команду:
sudo nano /var/www/html/info.php



Откроется пустой файл. Введём в файл следующий текст, который является корректным PHP кодом:


info.php<?php phpinfo(); ?>



После внесения изменений сохраните и закройте файл.


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


Откроем этот адрес:http://IP_адрес_вашего_сервера/info.php



Страница, на которую вы попадете, должна выглядеть похожим образом:





Данная страница содержит информацию о вашем сервере с точки зрения PHP. Она полезна для отладки и чтобы удостовериться в корректности применения настроек.


Если все прошло успешно, значит ваш PHP работает корректно.


Вы, возможно, захотите удалить этот файл после теста, т.к. он может дать информацию о вашем сервере неавторизованным пользователям. Для удаления файла введите команду:
sudo rm /var/www/html/info.php



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

Заключение



Теперь, когда ваш стек LAMP установлен, у вас есть множество вариантов того, что делать дальше. Фактически, вы установили платформу, которая позволит установить (развернуть) большинство типов веб-сайтов и сетевого программного обеспечения на вашем сервере.


В качестве первого шага мы рекомендуем настроить веб-сервер на работу через HTTPS. Самый простой вариант обезопасить свой сайт с помощью бесплатного TLS/SSL сертификата - это использовать сервис Let's Encrypt.


Некоторые другие популярные мероприятия:



Установить Wordpress - наиболее популярную систему управления контентом в интернете.
Установить PHPMyAdmin для управления базами данных MySQL из веб-браузера.
Научиться использовать SFTP для передачи файлов на ваш сервер и с него.

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux