Архив метки: Настройка web сервера

Разрешаем загрузку больших файлов в nginx/apache/php

Nginx




Директива client_max_body_size задаёт максимально допустимый размер тела запроса клиента, указываемый в строке «Content-Length» в заголовке запроса. Если размер больше заданного, то клиенту возвращается ошибка «Request Entity Too Large» (413). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку.




sudo nano /etc/nginx/nginx.conf 




Далее находим или вставляем в секцию http следующую строчку:




client_max_body_size 100m;




После чего нужно будет не забыть перезагрузить nginx:




sudo service nginx reload




Apache/Php




Нужно изменить в php.ini сервера максимально разрешенный объём загружаемых файлов на нужное значение и  перезагрузить apache. Это параметры upload_max_filesize и post_max_size.







sudo nano /etc/php/8.1/apache2/php.ini




Находим и изменяем следующую директиву:




upload_max_filesize 100M




и эту:




post_max_size 100M




Сохраняем файл и перезагружаем apache:




sudo service apache2 reload




Nginx: timeout




Бывает такое, что загружаешь большой файл, а сайт отваливается по таймауту:




504 Gateway Time-out
nginx




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




sudo nano /etc/nginx/sites-available/yourdomain.ru




Добавляем/изменяем в секции location / {} следующие строчки (время в секундах):




location / {
...
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
...
}




Я указал 500 секунд, нужно понимать, что это фантастическая величина и она вам явно не нужна на сервере, но, вы можете поставить её на своё усмотрение!



2019-05-08T05:08:56
Настройка web сервера

Как легко включить TLS 1.3 в Nginx на Ubuntu 18.10, 18.04, 16.04, 14.04

Читаем статейку и настраиваем свой сервер :)



2019-05-08T02:24:48
Настройка web сервера

Кеширование исполняемого php-кода: OPCache

Обзор расширения OPCache для PHP можно почитать на хабре




Включение:




 sudo phpenmod opcache 




Выключение:




sudo phpdismod opcache 




Тут можно ознакомиться со скриптами для мониторигна работы OPCache




Тут можно почитать ещё одну полезную статью




И даже тут




А тут ещё одну 🙂



2019-05-08T02:08:19
Настройка web сервера

Основные команды SSH

Рассмотрим основные команды, используемые при работе с сервером через SSH.




ls




Выводит список файлов и папок в текущей директории.




ls -la или ll




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




cd




Переход в указанную директорию.
Вводится так: cd директория




mv




Перемещение или переименование файла или папки.
Вводится так: mv текущее_имя новое_имя




rm




Удаление файла или папки.
Вводится так: rm путь_к_файлу




cp




Копирование файла или папки в другое место.
Вводится так: cp имя_файла куда_скопировать




chmod




Изменяет права доступа на файл или папку.




chown




Изменяет владельца файла или папки.
Вводится так: chown пользовать:группа файл




mkdir




Создание директории по указанному пути.
Вводится так: mkdir путь




mc




Запускает файловый менеджер Midnight Commander.



2019-05-07T19:09:09
Настройка web сервера

Установка PhpMyAdmin 5.X.X на сервер с Ubuntu 18.04 LTS

Будем считать, что у вас уже есть сервер с настроенным и работающим сайтом. Доменное имя у него пусть будет phpmyadmin.site.




Для начала вам нужно закачать в корневую или любую другую директорию сайта (на ваш выбор) архив phpmyadmin. Скачивать мы будем с официального сайта: https://www.phpmyadmin.net




Теперь у нас есть два варианта развития событий:




  1. Закачать напрямую через wget ssh консоль сервера;
  2. Скачать архив себе на компьютер, а затем уже закачать и распаковать или закачать распакованную версию на ваш сайт через sftp/ftp.




Во верхнем правом углу видим кнопку «Download 5.x.x», нажимаем её и скачиваем к себе на компьютер, а потом закачиваем к себе на сайт или же, дабы упростить это действие я закачиваю напрямую на свой сервер:




Перехожу в корневую директорию своего сайта:




cd /home/phpmyadmin_site/www




Копирую адрес ссылки phpmyadmin c официального сайта (наводим курсор мышки на кнопку DOWNLOAD, ПКМ, копировать адрес ссылки)




Возвращаемся в консоль сервера и закачиваем:




wget https://files.phpmyadmin.net/phpMyAdmin/5.x.x/phpMyAdmin-4.x.x-all-languages.zip







Не забывайте, что у вас будет другая версия phpmyadmin и 5.x.x будет отличаться.




Распаковываем скачанный архив:




unzip phpMyAdmin-5.x.x-all-languages.zip 




Удаляем архив:




rm phpMyAdmin-5.x.x-all-languages.zip 




Если вам нужно поместить phpmyadmin не в корневую директорию, то можно просто переименовать папку командой:




mv ./phpMyAdmin-5.x.x-all-languages  ./phpma 




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




Теперь можно перейти по адресу phpmyadmin вашего сервера:




http(s)://phpmyadmin.site/phpma




И попробовать авторизоваться под пользователем root и его паролем. Скорее всего вы получите ошибку вида:




mysqli_real_connect(): (HY000/1698): Access denied for user 'root'@'localhost'




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




Для того, чтобы пользователь root в MySQL мог использовать пароль для входа в систему вам необходимо изменить метод аутентификации с 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 | *CC944277A401A7D25BE1CA89AFF17BF607F8707F | 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'; 

password нужно заменить на ваш пароль для root пользователя




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




FLUSH PRIVILEGES; 




Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket для авторизации:




SELECT user,authentication_string,plugin,host FROM mysql.user; 







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




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




exit




Больше полезной информации по авторизации mysql: https://www.digitalocean.com/community/tutorials/mysql-ubuntu-18-04-ru




После чего вы вновь можете зайти в phpmyadmin через браузер с логином root и его паролем. Скорее всего вы успешно авторизуетесь, но в панели phpMyAdmin вы увидете множество алертов, вроде следующих:




 Хранилище конфигурации phpMyAdmin не полностью настроено, некоторые расширенные функции были отключены. Узнайте причину
Или перейдите на вкладку 'Операции' любой базы данных, чтобы настроить хранилище в ней.







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







В конфигурационном файле необходимо задать парольную фразу (blowfish_secret). 







$Cfg['TempDir'] (./tmp/) недоступен. Из-за этого phpMyAdmin не может кэшировать шаблоны и будет медленным. 




Далее нам нужно настроить phpmyadmin




Копируем образец конфигурационного файла phpmyadmin:




cp ./phpma/config.sample.inc.php ./phpma/config.inc.php




Редактируем конфиг:




sudo nano ./phpma/config.inc.php




Первым делом нужно задать секретный blowfish ключ, который будет состоять из 32 символов:




$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Вставляем что-то вроде этого:
$2a$58$iMaKE1DFydKAKNQPGR631uXjN75C0PT37x2xacokFCpZgcbm42G1q

В итоге получаете:
$cfg['blowfish_secret'] = '$2a$58$iMaKE1DFydKAKNQPGR631uXjN75C0PT37x2xacokFCpZgcbm42G1q'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */




Избавляемся от ошибки связанной с отсутствием расширения php-mbstring




Для избавления от следующей ошибки




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




Просто устанавливаем соответствующее расширение:




sudo apt install php-mbstring




После чего отправляем команду перечитать конфиги сервер Apache:




sudo service apache2 reload




Избавляемся от ошибки кэширования шаблонов phpmyadmin




Сама ошибка выглядит следующим образом:




$Cfg['TempDir'] (./tmp/) недоступен. Из-за этого phpMyAdmin не может кэшировать шаблоны и будет медленным. 




Возникает она из-за отсутствия в директории phpmyadmin папки tmp или из-за отсутствия прав на запись в неё.




Решить эту проблему можно двумя способами:




  1. Создать новую папку tmp в директории phpmyadmin
  2. Указать путь до вашей основной tmp папки сайта




В первом случае делаем следующее




Переходим в папку phpmyadmin:




cd ./phpma




Проверяем наличие папки:




ls -la




Если папка отсутствует, то создаем её:




mkdir ./tmp




Теперь нужно убедиться, что пользователь (или группа), на котором запущен веб-сервер (например, Apache), имеет доступ на запись во вновь созданную папку tmp. Следовательно, измените владельца на этого пользователя или добавьте права на запись для всех пользователей. Последний не может быть действительно целесообразным.




sudo chown -R phpmyadmin_site:www-data ./tmp 

phpmyadmin_site нужно заменить на имя пользователя, от которого работает этот сайт
(изменение владельца файла или папки вводится так: chown пользовать:группа файл/папка)




Во втором варианте поступаем иначе




Открываем конфигурационный файл phpmyadmin




sudo nano ./config.inc.php




И вставляем следующую строчку:




 $cfg['TempDir'] = '/home/phpmyadmin_site/temp'; 

/home/phpmyadmin_site/temp нужно заменить на основную tmp директорию вашего сайта. Так же можно заменить её на ../../tmp







Я вставлял после следующих строчек: 
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;




Избавляемся от алерта хранилища конфигурации phpMyAdmin




Выглядит этот алерт следующим образом:




Хранилище конфигурации phpMyAdmin не полностью настроено, некоторые расширенные функции были отключены. Узнайте причину. 
Или перейдите на вкладку 'Операции' любой базы данных, чтобы настроить хранилище в ней.




Исправляем:




Нажимаем «Узнайте причину». Далее выскочит следующее сообщение.
Создать базу данных с именем 'phpmyadmin' и настроить там хранение конфигурации phpMyAdmin.
Нажимаем создать, phpMyAdmin сделает все сам.




Теперь можно работать.



2019-05-07T17:04:01
Настройка web сервера

Создаём RAMdisk на Ubuntu 18.04

Создаем папку для рамдиска (точку монтирования):




sudo mkdir /mnt/ramdisk 




Монтируем:




sudo mount -t tmpfs -o rw,size=2G tmpfs /mnt/ramdisk 




ВНИМАНИЕ: Здесь: size=2G это значит, что рамдиск будет иметь размер 2 Гб. Для создания рамдиска размером 256Мб следует вписать:
size=256M




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




df -h 




И видим следующий результат:




Filesystem      Size  Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 620K 394M 1% /run
/dev/vda2 89G 74.5G 580G 6% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 395M 0 395M 0% /run/user/1000
tmpfs 2.0G 0 2.0G 0% /mnt/ramdisk




Теперь вы можете использовать рамдиск как вы используете обычные разделы жесткого диска. Вы даже можете редактировать любые файлы прямо из РАМДИСКА.




Чтобы отключить виртуальный диск (РАМДИСК), выполните следующую команду (все ваши файлы на этом разделе будут моментально удалены):




sudo umount /mnt/ramdisk 




Подключение RAM-диска на UBUNTU 18.04 автоматически, при загрузке системы




Вы можете использовать файл /etc/fstab для автоматического монтирования виртуального диска при загрузке системы.




Во-первых, сделайте резервную копию файла /etc/fstab. Можно с помощью следующей команды:




sudo cp -v /etc/fstab /etc/fstab.backup 




Резервная опия файла /etc/fstab сохранится в /etc/fstab.backup. Теперь если что-то случится в процессе, вы сможете просто восстановить файл /etc/fstab.




Открываем файл /etc/fstab:




sudo nano /etc/fstab 




После чего в конце файла добавляем следующую строчку:




tmpfs  /mnt/ramdisk  tmpfs  rw,size=2G  0   0 




После чего перезагружаем сервер командой:




sudo reboot




После загрузки системы РАМдиск должен быть автоматически смонтирован (нужно проверить):




 df -h 







.....
tmpfs 2.0G 0 2.0G 0% /mnt/ramdisk
.....




Сохранение данных RAM-диска:




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




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




Сначала создайте каталог, где данных RAM-диска будет сохранен при выключении системы с помощью следующей команды:




sudo mkdir /mnt/ramdisk_backup 




Теперь создайте файл системной службы с помощью следующей команды:




sudo nano /lib/systemd/system/ramdisk-sync.service




далее можно почитать в первоисточнике https://linuxhint.com/ramdisk_ubuntu_1804/



2019-05-06T07:02:07
Настройка web сервера