Установка Nginx
Установка веб-сервера Nginx:
$ sudo apt install nginx
Открываем в браузере http://localhost/
Остановка сервера:
$ sudo systemctl stop nginx
Запуск сервера:
$ sudo systemctl start nginx
Перезагрузить конфигурацию:
$ sudo systemctl reload nginx
Перезагрузить сервер:
$ sudo systemctl restart nginx
Проверить состояние:
$ systemctl is-active nginx
Включить автозапуск:
$ sudo systemctl enable nginx
Отключить автозапуск:
$ sudo systemctl disable nginx
Посмотреть информацию о версии:
$ nginx -v
nginx version: nginx/1.14.0 (Ubuntu)
Установка MySQL
Установка сервера БД MySQL:
$ sudo apt install mysql-server
Эта команда установит MySQL, но при этом не предложит задать пароль или
внести какие-либо правки в конфигурацию. Далее запускаем скрипт
безопасности, который изменит некоторые настройки по умолчанию на более
безопасные:
$ sudo mysql_secure_installation
Надо ответить на вопросы:
- Установить плагин проверки надежности паролей?
- Пароль для пользователя root?
- Подтверждение пароля для root?
- Удалить анонимного пользователя?
- Запретить root подключаться удаленно?
- Удалить тестовую базу данных?
По умолчанию пользователь root может подключаться только локально, т.е. с хоста localhost.
Начиная с версии 5.7 пользователь root подключается с помощью плагина auth_socket, а не по паролю:
$ sudo 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 | *76370DCD37985A94742AE45C0F4C890251AB21FA | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Изменим это:
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qwerty';
Query OK, 0 rows affected (0.00 sec)
> SELECT user, authentication_string, plugin, host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *AA1420F182E88B9E5F874F6FBE7459291E8F4601 | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *76370DCD37985A94742AE45C0F4C890251AB21FA | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
> FLUSH PRIVILEGES;
> exit
Проверим вход по паролю:
$ mysql -uroot -pqwerty
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.27-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
> exit
Остановка сервера:
$ sudo systemctl stop mysql
Запуск сервера:
$ sudo systemctl start mysql
Перезагрузить конфигурацию:
$ sudo systemctl reload mysql
Перезагрузить сервер:
$ sudo systemctl restart mysql
Проверить состояние:
$ systemctl is-active mysql
Включить автозапуск:
$ sudo systemctl enable mysql
Отключить автозапуск:
$ sudo systemctl disable mysql
Посмотреть информацию о версии:
$ mysql -V
mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper
Установка PHP
Установка PHP:
$ sudo apt install php7.2-fpm php7.2-mysql
Посмотрим, какие пакеты были установлены:
$ apt list --installed | grep php
php-common/bionic,bionic,now 1:60ubuntu1 all [установлен, автоматически]
php7.2-fpm/bionic,bionic,now 1:7.2+60ubuntu1 all [установлен]
php7.2-mysql/bionic,bionic,now 1:7.2+60ubuntu1 all [установлен]
php7.2-cli/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
php7.2-common/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
php7.2-json/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
php7.2-opcache/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
php7.2-readline/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
Установлены два пакета по нашему запросу и еще несколько — как зависимости.
FPM расшифровывается как Fastcgi Process Manager, менеджер процессов
FastCGI. PHP-FPM запускается как отдельный процесс и взаимодействует с
веб-сервером через порт 9000 или сокетный файл. Является альтернативной
реализацией PHP FastCGI с несколькими дополнительными возможностями,
обычно используемыми для высоконагруженных сайтов.
Проверяем работу службы FPM:
$ systemctl is-active php7.2-fpm
active
Настройка виртуальных хостов
Перейдем в директорию /var/www, которая содержит внутри себя директорию html с файлом index.html. Создадим еще две директории site1.loc и site2.loc. И внутри каждой директории создадим файл index.php:
$ cd /var/www
$ sudo -i
# mkdir site1.loc
# mkdir site2.loc
# cd /var/www/site1.loc
# nano index.php
<h1>Сайт site1.loc</h1>
<?php phpinfo(); ?>
# cd /var/www/site2.loc
# nano index.php
<h1>Сайт site2.loc</h1>
<?php phpinfo(); ?>
Теперь перейдем в директорию с настройками Nginx:
# cd /etc/nginx
# ls -l
drwxr-xr-x 2 root root 4096 авг 20 14:46 conf.d
-rw-r--r-- 1 root root 1077 апр 6 2018 fastcgi.conf
-rw-r--r-- 1 root root 1007 апр 6 2018 fastcgi_params
-rw-r--r-- 1 root root 2837 апр 6 2018 koi-utf
-rw-r--r-- 1 root root 2223 апр 6 2018 koi-win
-rw-r--r-- 1 root root 3957 апр 6 2018 mime.types
drwxr-xr-x 2 root root 4096 авг 20 14:46 modules-available
drwxr-xr-x 2 root root 4096 ноя 13 15:22 modules-enabled
-rw-r--r-- 1 root root 1482 апр 6 2018 nginx.conf
-rw-r--r-- 1 root root 180 апр 6 2018 proxy_params
-rw-r--r-- 1 root root 636 апр 6 2018 scgi_params
drwxr-xr-x 2 root root 4096 ноя 13 15:22 sites-available
drwxr-xr-x 2 root root 4096 ноя 13 15:22 sites-enabled
drwxr-xr-x 2 root root 4096 ноя 13 15:22 snippets
-rw-r--r-- 1 root root 664 апр 6 2018 uwsgi_params
-rw-r--r-- 1 root root 3071 апр 6 2018 win-utf
- nginx.conf: главный конфигурационный файл Nginx.
- sites-available: в этой директории хранятся файлы
виртуальных хостов. Nginx не использует файлы из этой директории, если
ссылки на них нет в директории sites-enabled. - sites-enabled: директория, в которой хранятся
активированные виртуальные хосты. Обычно это делается путём создания
ссылки на файл конфигурации хоста из директории sites-available. - modules-available, modules-enabled: эти директории содержат, соответственно, доступные и активные модули.
Посмотрим, какие сайты могут быть активированы:
# cd /etc/nginx/sites-available
# ls -l
-rw-r--r-- 1 root root 2416 апр 6 2018 default
И какие сайты сейчас доступны, т.е. были активированы:
# cd /etc/nginx/sites-enabled
# ls -l
lrwxrwxrwx 1 root root 34 ноя 13 15:22 default -> /etc/nginx/sites-available/default
В директории только одна ссылка, значит доступен только один сайт по адресу http://localhost/. Создадим два файла конфигурации виртуальных хостов:
# cd /etc/nginx/sites-available
# cp default site1.loc
# cp default site2.loc
И отредактируем эти файлы:
# nano site1.loc
server {
# слушать порт 80
listen 80;
# директория сайта
root /var/www/site1.loc;
# индексные файлы
index index.php index.html;
# домен сайта
server_name site1.loc www.site1.loc;
location / {
try_files $uri $uri/ =404;
}
# PHP скрипты передаются на выполнение FastCGI серверу
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}
# nano site2.loc
server {
# слушать порт 80
listen 80;
# директория сайта
root /var/www/site2.loc;
# индексные файлы
index index.php index.html;
# домен сайта
server_name site2.loc www.site2.loc;
location / {
try_files $uri $uri/ =404;
}
# PHP скрипты передаются на выполнение FastCGI серверу
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}
Активируем два наших сайта:
# ln -s /etc/nginx/sites-available/site1.loc /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/site2.loc /etc/nginx/sites-enabled/
# cd /etc/nginx/sites-enabled# ls -l
lrwxrwxrwx 1 root root 34 ноя 13 15:22 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 36 ноя 17 12:38 site1.loc -> /etc/nginx/sites-available/site1.loc
lrwxrwxrwx 1 root root 36 ноя 17 12:38 site2.loc -> /etc/nginx/sites-available/site2.loc
Перед тем, как перезагрузить Nginx, отредактируем файл hosts:
# nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu-lemp
127.0.0.1 site1.loc www.site1.loc
127.0.0.1 site2.loc www.site2.loc
Перезагружаем Nginx:
# systemctl reload nginx
И проверяем работу сайтов:
Обсудить эту статью можно в Телеграм канале: https://t.me/linautonet