Установка и настройка WEB сервера NGINX + Apache (httpd) + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Postfix на AlmaLinux 9

Материал из Шпаргалка знаний
Версия от 13:30, 10 октября 2024; Admin (обсуждение | вклад) (Новая страница: «Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. После установки на сервер AlmaLinux 9 (Minimal) (x86_64) 4Gb RAM, 4 CPU, 50Gb SSD, приступаем к подготовке сервера. ('''''https://almalinux.org/get-alma...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

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

После установки на сервер AlmaLinux 9 (Minimal) (x86_64) 4Gb RAM, 4 CPU, 50Gb SSD, приступаем к подготовке сервера. (https://almalinux.org/get-almalinux/)

Проверить какая у вас версия ОС можно командой:

cat /etc/*release

Подготовка сервера

Обновляем AlmaLinux 9:

dnf update -y

Устанавливаем репозиторий EPEL и дополнительные пакеты для загрузки и распаковки:

dnf install epel-release wget nano mc unzip open-vm-tools dnf-utils net-tools diffutils curl tar -y

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

Устанавливаем корректный часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* данной командой мы установим часовой пояс по московскому времени.

Теперь устанавливаем и запускаем службу для автоматической синхронизации времени:

dnf install chrony -y
systemctl enable chronyd
systemctl start chronyd

Безопасность

Если на сервере используется SELinux (по умолчанию, на системах RPM), рекомендуется ее отключить.

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

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

Брандмауэр

Для нормальной работы WEB сервера нужно открыть порты:

  • 80 — основной порт (http);
  • 8080 — дополнительный порт (http);
  • 443 — SSL порт (https);
  • 20, 21 — порты нужны для работы (FTP);
  • 60000-65535 — порты необходимы для работы FTP (динамические порты для пассивного режима);
  • 25, 465, 587 — порты нужны для работы почтового сервера по SMTP;
firewall-cmd --permanent --add-port={80,443,8080}/tcp
firewall-cmd --permanent --add-port={20,21,60000-65535}/tcp
firewall-cmd --permanent --add-port={25,465,587}/tcp
firewall-cmd --reload

* Команда (firewall-cmd --reload) перезапускает firewalld, чтобы применить новые правила.

Установка NGINX

Устанавливаем NGINX:

dnf install nginx -y

Внесем небольшую корректировку в файл nginx.conf:

nano /etc/nginx/nginx.conf
http {
    ...
    server_names_hash_bucket_size 1024;
    ....
}

* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx
systemctl start nginx

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

  • обратите внимание, что данное приветствие может иметь и другой вид.

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

Если мы введем команду: dnf install php php-fpm , то у нас репозитария установиться php версии 8.0, но нам нужно php версии 8.3.

Добавляем репозиторий:

dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Обновляем кеш после добавления двух репозиториев.

dnf makecache -y

Смотрим лист конфигурационных репозиториев системы:

dnf repolist

Видим:

repo id                                                                    repo name
appstream                                                                  CentOS Stream 9 - AppStream
baseos                                                                     CentOS Stream 9 - BaseOS
epel                                                                       Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264                                                        Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
epel-next                                                                  Extra Packages for Enterprise Linux 9 - Next - x86_64
extras-common                                                              CentOS Stream 9 - Extras packages
remi-modular                                                               Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe    

Теперь вы можете перечислить модули PHP и посмотреть, был ли добавлен PHP 8.4

dnf module list php

После этого теперь вы можете сбросить модуль и включить PHP 8.4:

dnf module reset php
dnf module install php:remi-8.4
dnf module enable php:remi-8.4

И устанавливаем php и PHP-FPM версии 8.4:

dnf install php php-fpm -y

Проверяем:

php -r "phpinfo();" | grep "PHP Version"

Установим наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

dnf install php-{common,spl,hash,ctype,cli,gd,ldap,odbc,pdo,pecl-memcache,opcache,pear,xml,xmlrpc,mbstring,json,snmp,soap,intl,devel,apcu,igbinary,curl,imagick,fpm,zip,cgi,mysqlnd,gettext,bcmath,imap} -y
dnf install libicu-devel -y

Запускаем php-fpm и разрешаем его автозапуск:

systemctl enable --now nginx php-fpm

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию. Открываем файл для настройки виртуального домена по умолчанию. В зависимости от версии AlmaLinux 9 пути могут различаться:

1) nano /etc/nginx/conf.d/default.conf
2) nano /etc/nginx/nginx.conf

3) nano /etc/nginx/nginx.conf.default

В секции server редактируем параметр index на следующее значение:

server {
    ...
    index index.php index.html index.htm;
    ...
}
  • добавляем index.php в начало списка. Если параметра index нет, создаем его.

А внутри секции server добавим следующее:

    location ~ \.php$ {
        set $root_path /usr/share/nginx/html;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
  • где /usr/share/nginx/html — корневой путь хранения скриптов; unix:/run/php-fpm/www.sock — файл для взаимодействия с php-fpm.

Открываем настройки php-fpm:

nano /etc/php-fpm.d/www.conf

Проверяем, настройки параметров:

listen = /run/php-fpm/www.sock
...
listen.group = nginx
...
  • listen должен иметь значение /run/php-fpm/www.sock (путь до сокетного файла, который мы указали в конфигурационном файле nginx); listen.group указывает, какую группу назначить сокетному файлу.

... иначе, меняем значение. После перезагружаем php-fpm:

systemctl restart php-fpm
  • в данном примере мы указываем, что php-fpm будет использовать сокетный файл /run/php-fpm/www.sock для взаимодействия. Этот файл мы указали выше в настройке NGINX.

Проверяем правильность настроек nginx:

nginx -t

Если все настроено верно, то видим следующее:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

И перезагружаем его:

systemctl restart nginx

Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:

nano /usr/share/nginx/html/index.php
<?php phpinfo(); ?>

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

Установка MariaDB или MySQL

Подключение актуального репозитория:

В примерах выше мы установили СУБД из репозиториев операционных систем. А значит — нет гарантии, что будет установлена последняя версия MariaDB. Для решения задачи мы можем подключить официальный репозиторий самого разработчика.

Генерируем репозиторий mariadb.repo.

Скачиваем скрипт из оф.сайта для генерации репозитория mariadb.repo и даем ему право на выполнение.

cd ~
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup

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

./mariadb_repo_setup

Итак, после выполнения скрипта файл mariadb.repo будет сгенерирован в директории /etc/yum.repos.d.

Заходим и смотрим, что он там намутил...

nano /etc/yum.repos.d/mariadb.repo

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

dnf install mariadb mariadb-server --allowerasing
  • для установки mysql выполняем команду dnf install mysql

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

yum list installed | grep mariadb

Разрешаем автозапуск и запускаем СУБД:

systemctl enable mariadb --now
  • для работы с mysql меняем mariadb на mysql.

Проверьте состояние службы MariaDB, выполнив следующую команду.

systemctl status mariadb

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

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

Сразу создаем пароль для учетной записи root:

mysqladmin -u root password

PHP + MariaDB (MySQL)

Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:

dnf install php-mysqli php-mysql -y

Проверяем, что поддержка mysql теперь есть в PHP:

php -i | grep mysql

Мы должны увидеть:

...
mysqlnd
mysqlnd => enabled
Version => mysqlnd 8.0.30
...
  • нас не должно смущать, что установили мы mariadb, а заголовок mysql.

После перезагружаем php-fpm:

systemctl restart php-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:


* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.

Установка phpMyAdmin

Устанавливаем phpMyAdmin командой:

dnf install phpmyadmin -y

Готово. Так как в процессе установки были также установлены компоненты PHP и добавлен конфигурационный файл для NGINX, перезапускаем сервисы:

После перезапускаем NGINX и php-fpm:

systemctl reload nginx php-fpm

И открываем в браузере наш домен, в данном примере, http://<IP-адрес сервера>/phpMyAdmin. Откроется форма для авторизации — вводим логин root и пароль, который мы указали после установки и запуска mariadb.

Теперь создадим для phpmyadmin отдельный виртуальный домен в NGINX:

nano /etc/nginx/conf.d/phpMyAdmin.conf

И добавим в него следующее содержимое:

server {
        listen       80;
        server_name  phpmyadmin.putyato.local;
        set $root_path /usr/share/phpMyAdmin;

        location / {
                root $root_path;
                index index.php;
        }

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/www.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_param DOCUMENT_ROOT $root_path;
                fastcgi_read_timeout 300;
        }
}

* где phpmyadmin.putyato.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX и php-fpm:

systemctl reload nginx
systemctl restart php-fpm

И открываем в браузере наш домен, в данном примере, http://phpmyadmin.putyato.local. Откроется форма для авторизации — вводим логин root и пароль, который мы указали после установки и запуска mariadb.

Установка и настройка FTP-сервера

В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизоваться под uid системных учетных записей.

Нам нужен будет репозиторий CodeReady Linux Builder (CRB):

dnf config-manager --set-enabled crb

Теперь ProFTPd и набор утилит для работы с ним можно установить командой:

dnf install proftpd proftpd-utils

Создаем виртуального пользователя:

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin
  • где

/etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи;

ftpwww — имя пользователя (логин);

uid и gid — идентификаторы пользователя и группы системной учетной записи (apache);

/var/www — домашний каталог пользователя;

/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Изменим права для созданного файла с паролями:

chmod 440 /etc/proftpd/ftpd.passwd

* в противном случае, при запуске proftpd мы получим ошибку «...fatal: AuthUserFile: unable to use /etc/proftpd.d/ftpd.passwd: Operation not permitted...»

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

nano /etc/proftpd.conf

И редактируем следующее (комментируем):

#AuthOrder ...

Создадим конфигурационный файл со своими настройками:

nano /etc/proftpd/conf.d/custom.conf

И добавим следующее:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd --now

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS.

Apache (httpd)

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

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

И так, устанавливаем httpd:

dnf install httpd -y

Заходим в настройки:

nano /etc/httpd/conf/httpd.conf

И редактируем следующее:

Listen 8080

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

Добавляем:

<Directory /var/www/*/www>
    AllowOverride All
    Options Indexes ExecCGI FollowSymLinks
    Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталогов разрешен со всех адресов (all granted).

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

apachectl configtest

И если получаем ответ:

Syntax OK

... разрешаем автозапуск и запускаем службу:

systemctl enable httpd --now

Создаем php-файл со следующим содержимым:

nano /var/www/html/index.php
<?php phpinfo(); ?>

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080 (http://<IP-адрес нашего сервера>:8080). Откроется привычная нам страница с информацией о PHP.

В разделе «PHP Variables» мы должны увидеть Apache для опции $_SERVER['SERVER_SOFTWARE']:


Вводим команду для отправки http-запроса веб-серверу Apache:

curl -s http://127.0.0.1:8080 | grep SERVER_SOFTWARE

Мы должны получить что-то на подобие:

<tr><td class="e">$_SERVER['SERVER_SOFTWARE']</td><td class="v">Apache/2.4.57 (Rocky Linux)</td></tr>

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

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

1) nano /etc/nginx/conf.d/default.conf
2) nano /etc/nginx/nginx.conf

3) nano /etc/nginx/nginx.conf.default
  • если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.

Находим наш настроенный location для php-fpm:

...
    location ~ \.php$ {
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
    }
...

и меняем на:

...
    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
...

Проверяем и перезапускаем nginx:

nginx -t
systemctl restart nginx

Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Так как все запросы на httpd приходят от NGINX, они воспринимаются как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей.

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

dnf install httpd-devel gcc unzip redhat-rpm-config -y

Переходим в каталог /usr/local/src, Скачиваем модуль, Распаковываем его, Переходим в распакованный каталог, Собираем модуль и устанавливаем его:

cd /usr/local/src
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
unzip stable.zip
cd mod_rpaf-stable/
make
make install

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой dnf install which.

Создаем конфигурационный файл со следующим содержимым:

nano /etc/httpd/conf.d/mod_rpaf.conf
LoadModule              rpaf_module modules/mod_rpaf.so
RPAF_Enable             On
RPAF_ProxyIPs           127.0.0.1
RPAF_SetHostName        On
RPAF_SetHTTPS           On
RPAF_SetPort            On
RPAF_ForbidIfNotProxy   Off

Перезапускаем httpd:

systemctl restart httpd

Для проверки настройки открываем на редактирование созданный index-файл для httpd:

nano /var/www/html/index.php
<?php echo $_SERVER['REMOTE_ADDR'] ?>

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

Postfix

Устанавливаем postfix командой:

dnf install postfix -y

Теперь нам необходимо сделать несколько простых настроек:

nano /etc/postfix/main.cf

Редактируем:

...
myorigin = $mydomain
...
inet_protocols = ipv4
...

Добавляем:

smtp_generic_maps = hash:/etc/postfix/generic_map

* myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; inet_protocols — задает версию IP, с которой будет работать Postfix (если на нашем сервере используется ipv6, значение параметра стоит оставить all); smtp_generic_maps указывает на карту с общими правилами пересылки.

Открываем карту пересылки:

nano /etc/postfix/generic_map

И добавляем:

@putyato.ru    no-reply@putyato.ru

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@putyato.ru.

Создаем карту: Открываем карту пересылки:

postmap /etc/postfix/generic_map

Для применения настроек перезагружаем почтовый сервер:

systemctl restart postfix

Тюнинг веб-сервера

PHP

Открываем на редактирование следующий файл:

nano /etc/php.ini

И правим следующее:

upload_max_filesize = 1024M
...
post_max_size = 1024M
...
memory_limit = 1024M
...
short_open_tag = On
...
date.timezone = "Europe/Moscow"
...
max_execution_time = 180

Перезапускаем php-fpm и httpd:

systemctl restart php-fpm
systemctl restart httpd

NGINX

Открываем на редактирование следующий файл:

nano /etc/nginx/nginx.conf

И правим следующее:

worker_processes  auto;

И внутри секции http добавляем:

client_max_body_size 1024M;

После перезапускаем nginx:

systemctl restart nginx

Создание первого сайта

Задаем переменную, значение которой будет домен сайта:

TMP_SITE=putyato.ru
  • где putyato.ru — имя домена. Нам будет намного удобнее копировать и вставлять команды с переменной (не придется править после копипасты).

Создаем новый файл виртуального домена NGINX:

nano /etc/nginx/conf.d/$TMP_SITE.conf
  • обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое.

Для HTTP:

server {
    listen       80;
    server_name  putyato.ru www.putyato.ru;
    set $root_path /var/www/putyato.ru/www;

    access_log /var/www/putyato.ru/log/nginx/access_log;
    error_log /var/www/putyato.ru/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root   $root_path;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}
  • где putyato.ru — домен, для которого создается виртуальный домен; /var/www/putyato.ru — каталог, в котором будет размещаться сайт.
    • все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
      • обратите внимание на выделения полужирным — здесь нужно подставить свои данные.

Для HTTPS:

server {
    listen 80;
    server_name putyato.ru www.putyato.ru;
    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }
    if ($uri !~ /.well-known){
        return 301 https://$host$request_uri;
    }
}

server {
    listen       443 ssl;
    ssl on;  #Если возникнет ошибка, то закомментировать эту строку.
    ssl_certificate /etc/nginx/ssl/putyato.ru/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/putyato.ru/privkey.pem;

    server_name  putyato.ru www.putyato.ru;
    set $root_path /var/www/putyato.ru/www;

    access_log /var/www/putyato.ru/log/nginx/access_log;
    error_log /var/www/putyato.ru/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root   $root_path;

    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}
  • в первой секции server мы перенаправляем все запросы по незащищенному http на https.
    • ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно.
      • для получения бесплатного сертификата читайте статью Получение бесплатного SSL сертификата Let's Encrypt.

Теперь создаем виртуальный домен в Apache:

nano /etc/httpd/conf.d/$TMP_SITE.conf
<VirtualHost *:8080>
    Define root_domain putyato.ru
    Define root_path /var/www/putyato.ru

    ServerName ${root_domain}
    ServerAlias www.${root_domain}
    DocumentRoot ${root_path}/www

    ErrorLog     ${root_path}/log/apache/error_log
    TransferLog  ${root_path}/log/apache/access_log
</VirtualHost>

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/{www,tmp}
mkdir -p /var/www/$TMP_SITE/log/{nginx,apache}

Создаем индексный файл со следующим содержимым:

nano /var/www/$TMP_SITE/www/index.php
<?php echo "<h1>Hello from putyato.ru</h1>"; ?>

Задаем права на папки:

chown -R apache:apache /var/www/$TMP_SITE
chmod -R 775 /var/www/$TMP_SITE

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

nginx -t
apachectl configtest

Перезапускаем веб-сервер:

systemctl reload nginx
systemctl reload httpd

Открываем сайт в браузере.


При необходимости, создаем базу данных.

mysql -uroot -p
> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON site1.* TO dbuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
  • данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

Установка MediaWiki

Убедитесь, что ваша система соответствует требованиям к установке:

https://www.mediawiki.org/wiki/Manual:Installation_requirements/ru

Загрузите tar-файл MediaWiki с официальной страницы загрузки:

https://www.mediawiki.org/wiki/Download/ru

Распаковываем скаченный архив, на сегодняшний день последняя версия архива: mediawiki-1.40.0.zip И переносим содержимое архива на сервер в папку:

/var/www/wiki.putyato.ru/www

Настройка базы данных если требуется, но скрипт LocalSettings при первом запуске MediaWIKIэто делает автоматически.

Следующие команды создают базу данных с именем my_wiki, пользователя с именем wikiuser, и установят разрешения для пользователя в этой базе данных.

CREATE DATABASE my_wiki;
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY 'database_password';
GRANT ALL PRIVILEGES ON my_wiki.* TO 'wikiuser'@'localhost' WITH GRANT OPTION;

Запуск установочного скрипта

Далее, завершите установку MediaWiki, перейдя по URL вашей установленной MediaWiki в вашем веб-браузере: Следуйте инструкциям в Manual:Настройка скрипта.

https://www.mediawiki.org/wiki/Manual:Config_script/ru

Полученный файл LocalSettings.php переносим в корневую папку с MediaWiki:

/var/www/wiki.putyato.ru/www

Расширенные настройки файла LocalSettings.php и частые вопросы:

https://www.mediawiki.org/wiki/Manual:FAQ/ru

Можно скачать файл LocalSettings.php с моими настройками и заменить старый. Но после скачивания файла, следует в этом файле установить свой пароль на БД.

$wgDBpassword = "Указываем свой пароль на БД";
cd /var/www/wiki.putyato.ru/www
wget "https://cloud.putyato.ru/index.php/s/pSRkwEXBffXH7iQ/download/LocalSettings.php" --no-check-certificate -O LocalSettings.php

Как убрать : Заглавная страница.

Запускаем наш сайт с префиксом: ?title=MediaWiki:Mainpage

http://wiki.putyato.ru?title=MediaWiki:Mainpage

Вместо Заглавная страница, вписываем свое название.- Шпаргалка знаний.

Так же можно править и меню слева: ?title=MediaWiki:Sidebar

Доработка WordPress.

Добавить в корневом каталоге WordPress в файл wp-config.php:

define('WP_MEMORY_LIMIT', '1024M');
define('WP_MAX_MEMORY_LIMIT', '1024M');