0

Установка и настойка web сервера Nginx + Apache + PHP + MySQL на Debian 11

02.09.2023

Перед началом работы.

Перед установкой я обычно захожу по ssh на сервер. Получаю права root на Ubuntu 20.04

sudo bash

На Debian 11 по умолчанию нет sudo, нужно либо поставить, либо использовать команду

su - 

Потом проверяю и ставлю обновления

apt update
apt upgrade

Web сервер Apache в качестве Back-end
Установка web сервера Apache
Теперь можно приступать к установке Apache в системе Debian 11 / Ubuntu lts 20.04

 apt install apache2 apache2-utils
После этого, если файрволл ufw включён, нужно разрешить доступ к 80 и 443 портам.

ufw allow 80
ufw allow 443
Сервис apache2 стартует сразу после установки. Можно проверить через браузер:

http://"ip адрес сервера", в моём случае http://192.168.48.92

Настройка web сервера Apache
Начинаем настройку с портов. Поскольку у нас Apache будет в роле back-end, убираю его с 80 порта, на 8080.

mcedit /etc/apache2/ports.conf

Listen 8080

Сохраняем и перегружаем службу

service apache2 restart
Проверяем поднялся ли Apache на новом порту

# netstat -tulnp | grep apache2
tcp6       0      0 :::8080                 :::*                    LISTEN      764/apache2
Создаем в директории /var/www директорию blank с пустым index.hmtl

cd /var/www
mkdir blank
echo " " >> /var/www/blank/index.html
Заворачиваем в неё все дефольтные web запросы

mcedit /etc/apache2/sites-available/000-default.conf

<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/blank

        
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Я предпочитаю следующую структуру web хостинга:

~/www/site1.local

~/log/

директория для содержимого сайта

директория для логов сайта

В директории пользователя надо создать 2 директории www и log, в моём случае это пользователь yuri

cd /home/yuri
mkdir www
mkdir www/test.hserv.su
mkdir log
Создаем виртуальный хостинг для сайта site1.local

mcedit /etc/apache2/sites-available/test.hserv.su.conf

<VirtualHost *:8080>
        ServerAdmin web@localhost
        ServerName test.hserv.su
        ServerAlias www.test.hserv.su
        DocumentRoot /home/yuri/www/test.hserv.su

        ErrorLog /home/yuri/log/test.hserv.su_error.log
        CustomLog /home/yuri/log/test.hserv.su_access.log combined
        
        <Directory />
             Options FollowSymLinks
             AllowOverride All
        </Directory>
        
        <Directory /home/yuri/www/test.hserv.su/>
             Options Indexes FollowSymLinks
             AllowOverride None
             Require all granted
        </Directory>

</VirtualHost>

Включаем сайт в конфигурации

a2ensite test.hserv.su.conf
После этого нужно перегрузить Apache для применения изменений.

service apache2 restart
Если возникли какие-то ошибки — смотрим лог apache error_log.

cat /home/yuri/log/test.hserv.su_error.log
Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /home/yuri/www/test.hserv.su/ файл index.html

mcedit /home/yuri/www/test.hserv.su/index.html

<h1>Welcome to test.hserv.su!</h1>

chown yuri. /home/yuri/www/test.hserv.su/index.html
Дальше на своем компьютере правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:

192.168.48.92		test.hserv.su
где 192.168.48.92 IP адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.

Теперь в браузере набираем адрес http://test.hserv.su:8080. Если видим картинку:


значит все правильно настроили. Если какие-то ошибки, то идем смотреть лог ошибок конкретного виртуального хоста

cat /home/yuri/log/test.hserv.su_error.log
Web сервер Nginx в качестве Front-end
Установка web сервера Nginx
Теперь приступим к установке Nginx

apt install nginx
Настройка web сервера Nginx
Теперь приступим к настройке. Создадим конфиги Nginx для этих виртуальных хостов.

mcedit /etc/nginx/sites-available/test.hserv.su.conf

server {
    listen 80;
    server_name test.hserv.su www.test.hserv.su;
    access_log /home/yuri/log/nginx-test-hserv-access.log combined buffer=64k;
    error_log /home/yuri/log/nginx-test-hserv-error.log error;

    location / {
	proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        root        /home/yuri/www/test.hserv.su;
        access_log  off;
        expires     max;
    }  

    location = /robots.txt {
        root  /home/yuri/www/test.hserv.su;
        allow all;
        log_not_found off;
        access_log off;
    }
}

Применим наш конфиг в доступные сайты

ln -s /etc/nginx/sites-available/test.hserv.su.conf /etc/nginx/sites-enabled/test.hserv.su.conf
service nginx reload
Теперь в браузере набираем адрес http://test.hserv.su. Если видим картинку:


значит все правильно настроили.

Настройка Nginx SSL с помощью Let’s Encrypt
Дальнейшая настройка возможна, только для зарегистрированного домена и правильной настройки DNS.

Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt.

apt install certbot python3-certbot-nginx
Certbot предоставляет широкий выбор способов получения сертификатов SSL с помощью плагинов: Плагин Nginx изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется. Для использования этого плагина введите следующую команду:

certbot --nginx -d test.hserv.su
Первый раз certbot спросит у вас email, на который Let’s Encrypt будет присылать уведомления, когда сертификат будет заканчиваться. Let’s Encrypt предоставляет сертификаты на 90 дней.

Принимаем условия соглашения, решаем подписываться на рекламу или нет. После этого certbot проверит сайт на доступность по 80 порту. После проверки, certbot пропишет в конфигурацию nginx для нашего домена test.hserv.su SSL сертификаты и попытается сделать редирект с 80 порта на 443

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/test.hserv.su/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/test.hserv.su/privkey.pem
   Your certificate will expire on 2022-01-12. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
Пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.

Запросить статус таймера с помощью команды systemctl:

systemctl status certbot.timer

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Thu 2021-10-14 16:18:32 MSK; 14min ago
    Trigger: Fri 2021-10-15 04:35:52 MSK; 12h left
   Triggers: ● certbot.service

Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.

Установка PHP
В базовом репозитории как Debian 11, так и Ubuntu 20.04 хранится актуальная версия php 7.4. Если у вас нет необходимости использовать что-то новее или старее, то можно остановиться на этой версии.

Устанавливаем php в Debian 11 или Ubuntu 20.04 , а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.

apt install php php-cli php-mysql php-json php-gd php-ldap php-odbc php-common php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
Выполним перезапуск Apache:

service apache2 restart
Создадим файл в директории виртуального хоста и проверим работу php:

mcedit /home/yuri/www/test.hserv.su/index.php

<?php phpinfo(); ?>

chown yuri. /home/yuri/www/test.hserv.su/index.php
Заходим по адресу http://test.hserv.su/index.php


Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.

Где лежит php.ini
После установки часто возникает вопрос, а где хранятся настройки php? В Debian системах уже относительно давно, файл php.ini разделили. Для Apache он расположен в папке /etc/php/7.4/apache2/, для cli он расположен в папке /etc/php/7.4/cli/. Там можно редактировать глобальные настройки для всех виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:

mcedit /etc/apache2/sites-available/test.hserv.su.conf
Добавляем в самый конец, перед </VirtualHost>


php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 120
php_admin_value max_input_time 120
php_admin_value post_max_size 200M
php_admin_value upload_max_filesize 50M
php_admin_value max_file_uploads 150

Для применения настроек нужно сделать перегрузить Apache.

service apache2 restart

Установка MySQL
Сейчас все большее распространение получает форк MySQL — MariaDB. Она имеет полную совместимость с MySQL. В последнее время, я предпочитаю использовать именно ее.

Устанавливаем mariadb в Debian 11 или Ubuntu 20.04

apt install mariadb-server
Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

mysql_secure_installation
Откроется серия диалогов, где нужно внести некоторые изменения в параметры безопасности установки MariaDB. Меняем пароль пользователя root для текущей базы данных, потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу. все предложения мастера.

Файлы настроек mysql/mariadb в Debian лежат в директории /etc/mysql/. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.

service mariadb restart
Установка phpmyadmin
Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директорию с виртуальным хостом исходники панели. Создаем структуру папок.

mkdir /home/yuri/www/test.hserv.su/pma
Идем на сайт https://www.phpmyadmin.net и копируем ссылку на последнюю версию панели. Затем загружаем ее через консоль

cd ~
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.gz
Распаковываем исходники в директорию виртуального хоста.

tar xvzf phpMyAdmin-5.1.1-all-languages.tar.gz
cp -R phpMyAdmin-5.1.1-all-languages/* /home/yuri/www/test.hserv.su/pma/
chown -R yuri. /home/yuri/www/test.hserv.su/pma/
Настройка phpmyadmin
Phpmyadmin готов к работе сразу после установки, дополнительные настройки не обазательны. Закрываем доступ к панели средствами Web сервера. Для использования панели необходимо будет не только знать имя учетной записи mysql, но и пользователя и пароль для доступа непосредственно к панели.

Будем использовать стандартное средство для ограничения доступа к каталогу с помощью .htaccees. Создадим такой файл в папке со скриптами phpmyadmin:

mcedit /home/yuri/www/test.hserv.su/pma/.htaccess

AuthName "Enter Password"
AuthType Basic
Require valid-user
AuthUserFile "/home/yuri/www/test.hserv.su/pma/.htpasswd"

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

htpasswd -bc /home/yuri/www/test.hserv.su/pma/.htpasswd user password
Где user — имя пользователя, а password пароль.

Чтобы авторизация заработала, необходимо в файле конфигурации виртуального хостинга в разделе Directory добавить параметр AllowOverride перед </VirtualHost>

 mcedit /etc/apache2/sites-available/test.hserv.su.conf

<Directory /home/yuri/www/test.hserv.su/pma/>
  AddDefaultCharset UTF-8
  Require all granted
  AllowOverride All
</Directory>

Перезапускаем Apache.

service apache2 restart
Проверяем настройку. При обращении по адресу веб панели, должно выскочить окошко с авторизацией:


Дополнительная настройка web сервера
После установки и настройки необходимо сделать тонкую настройку.

Настройка времени ожидания Nginx
Когда Nginx работает перед Apache, он передает запрос в Apache и ждет по умолчанию 60 секунд, если за это время не пришел ответ от Apache, то Nginx выдаст ошибку 502. Чтобы этого не происходило рекомендую поднять таймоуты до 120 секунд. В секцию location после proxy_pass вставить:

mcedit /etc/nginx/sites-available/test.hserv.su.conf

location / {
	proxy_pass http://127.0.0.1:8080;
        
        proxy_read_timeout    120;
        proxy_connect_timeout 120;
        proxy_send_timeout    120;
}

Перегружаем Nginx для применения настроек

service nginx restart
К примеру, для виртуального хостинга популярного CMS движка WordPress, я ставлю 180 секунд, потому что во время обновления плагинов или самого движка WordPress Apache может очень долго не отвечать


proxy_connect_timeout 180;
proxy_send_timeout    180;
proxy_read_timeout    180;

Передача реального IP клиента в Apache
Когда Nginx работает перед Apache, то в логах Apache, в скриптах будет присутсвовать IP локального 127.0.0.1, что не несет никаких сведений о том, какой пользователь был на сайте. Перестают работать все сервисы, привязанные к IP пользователю на сайтах.

Чтобы убедиться в этом создадим файл ip.php

 mcedit /home/yuri/www/test.hserv.su/ip.php

<?php
echo $_SERVER['REMOTE_ADDR']
?>

После этого переходим по адресу http://test.hserv.su/ip.php и видим:


КОНФИГУРИРОВАНИЕ NGINX
Чтобы это исправить идем в секцию location конфигурации Nginx после proxy_pass добавим:

mcedit /etc/nginx/sites-available/test.hserv.su.conf

location / {
	proxy_pass http://127.0.0.1:8080;
        
        proxy_read_timeout    120;
        proxy_connect_timeout 120;
        proxy_send_timeout    120;
        
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
}

Перегружаем Nginx для применения настроек

service nginx restart
КОНФИГУРИРОВАНИЕ APACHE
Для того, чтобы Apache начал правильно воспринимать и обрабатывать реальный IP пользователя, воспользуемся идущим в стандартном пакете Apache модулем remoteip.

Вначале настроим работу модуля remoteip. Для этого создадим файл remoteip.conf:

mcedit /etc/apache2/conf-available/remoteip.conf

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
RemoteIPTrustedProxy 127.0.0.1

Теперь всё это нужно подключить модуль remoteip и перегружаем Apache:

a2enmod remoteip
a2enconf remoteip
service apache2 restart
Если все правильно увидим, свой IP адрес. Если вы настраиваете в локальной сети, то там будет ваш локальный IP как у меня на картинке:


SSL между Nginx и Apache
Некоторым скриптам необходимо знать через какую схему они работают, http, или https. Таким образом они формируют ссылки, а иногда принудительно перенаправляют клиентов куда нужно. Из-за не правильной настройки серверного ПО переадресация не может завершиться и браузер покажет нам ошибку ‘too many redirects‘.К примеру, это относится к популярному CMS движку WordPress.

КОНФИГУРИРОВАНИЕ NGINX
Чтобы это исправить идем в секцию location конфигурации Nginx после proxy_pass добавим:

mcedit /etc/nginx/sites-available/test.hserv.su.conf

location / {
	proxy_pass http://127.0.0.1:8080;
        
        proxy_read_timeout    120;
        proxy_connect_timeout 120;
        proxy_send_timeout    120;
        
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
}

Перегружаем Nginx для применения настроек

service nginx restart
КОНФИГУРИРОВАНИЕ APACHE
Нам необходми модуль setenvif_module, который подключен стандартной установке Apache.

Добавляем в конфигурацию виртуального хостинга перед секцией </VirtualHost>

mcedit /etc/apache2/sites-available/test.hserv.su.conf

<IfModule setenvif_module>
  SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>

Перегружаем Apache для применения настроек

service apache2 restart
Доступ к сайту по sftp
Если вы планируется передавать доступ к сайту другим людям, например для доступа к исходникам сайта, то на текущий момент лучше это делать по протоколу sftp.

Открываем конфиг ssh по пути /etc/ssh/sshd_config и комментируем там одну строку, добавляя далее несколько новых.

mcedit /etc/ssh/sshd_config

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User yuri
ChrootDirectory /home/yuri
ForceCommand internal-sftp

Сохраняем и перезапускаем ssh.

service ssh restart
Настройка подключения sftp с ограничением доступа за пределами конкретной папки закончена.

Работа с сайтами разных пользователей на одном web сервере
Чтобы к файлам, загруженным через сайт, был доступ через ftp, можно запускать Apache от имени пользователя. Для этого используем модуль Apache mpm_itk. Поставим его.

apt install libapache2-mpm-itk
Добавляем в конфигурацию виртуального хостинга перед секцией </VirtualHost>

mcedit /etc/apache2/sites-available/test.hserv.su.conf

<IfModule mpm_itk_module>
	AssignUserId yuri www-data
</IfModule>

Где yuri это имя пользователя, а www-data это группа, под которым будет запускаться Apache

Перегружаем Apache для применения настроек

service apache2 restart
Ротация логов виртуальных хостов
Насторим ротацию логов виртуального хостинга, еЕсли этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла или или заканчивается место, к примеру, на многих VDS с ssd дают обычно маленький диск.

Создадим файл конфигурации logrotate для нашего виртуального хостинга

mcedit /etc/logrotate.d/hosting

/home/yuri/log/*log {
        size=2M
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 yuri www-data
        sharedscripts
        postrotate
                /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
        endscript
}

Ротация файлы логов происходит по достижению ими размера в 2Мб, сжимать после ротации и хранить 10 архивов с логом. Новые логи создаются сразу с соответствующими правами, чтобы у пользователя был доступ к ним.

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

Apache


<VirtualHost *:8080>
        ServerAdmin web@test.hserv.su
        ServerName test.hserv.su
        ServerAlias www.test.hserv.su
        DocumentRoot /home/yuri/www/test.hserv.su

        SetEnvIf X-Forwarded-Proto https HTTPS=on

        ErrorLog /home/yuri/log/test.hserv.su_error.log
        CustomLog /home/yuri/log/test.hserv.su_access.log combined

        <Directory />
             Options FollowSymLinks
             AllowOverride All
        </Directory>

        <Directory /home/yuri/www/test.hserv.su/>
             Options Indexes FollowSymLinks
             AllowOverride None
             Require all granted
        </Directory>

        <Directory /home/yuri/www/test.hserv.su/pma/>
            AddDefaultCharset UTF-8
            Require all granted
            AllowOverride All
        </Directory>

        #Запуск Apache под пользователем
        <IfModule mpm_itk_module>
             AssignUserId yuri www-data
        </IfModule>

        php_admin_value date.timezone 'Europe/Moscow'
        php_admin_value max_execution_time 300
        php_admin_value max_input_time 180
        php_admin_value post_max_size 200M
        php_admin_value upload_max_filesize 50M
        php_admin_value max_file_uploads 150

</VirtualHost>

Nginx


server {
    server_name test.hserv.su www.test.hserv.su;
    access_log /home/yuri/log/nginx-test-hserv-access.log combined buffer=64k;
    error_log /home/yuri/log/nginx-test-hserv-error.log error;


    

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_connect_timeout 120;
        proxy_send_timeout 120;
        proxy_read_timeout 180;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        root        /home/yuri/www/test.hserv.su;
        access_log  off;
        expires     max;
    }

    location = /robots.txt {
        root  /home/yuri/www/test.hserv.su;
        allow all;
        log_not_found off;
        access_log off;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/test.hserv.su/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.hserv.su/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    
}
server {
    if ($host = test.hserv.su) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name test.hserv.su www.test.hserv.su;
    return 404; # managed by Certbot


}

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

1 Nginx 2.1K views

Web сервер Nginx PHP 8.0 Php-fpm Centos 8

Конфиг репозитория /etc/yum.repos.d/nginx.repo Устанавливаем nginx на сервер. Открыть порты 80 и 443 на firewalld, который используется в centos 8 по-умолчанию. Проверить, открылись ли
Previous Story

Nginx Proxy Manager

Next Story

Настройка веб-сервера в Docker (NGINX + PHP + MariaDB)

Latest from Blog

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных

Настройка и использование Memcached

В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS. Кеширование данных – немаловажный момент в работе любого веб-проекта. С ростом посещаемости увеличиваются требования к

Как настроить логирование и ротацию логов Nginx

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

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Приватную сеть можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере HAProxy – бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими
Go toTop

Don't Miss

Nginx

Web сервер Nginx PHP 8.0 Php-fpm Centos 8

Конфиг репозитория /etc/yum.repos.d/nginx.repo Устанавливаем nginx на сервер. Открыть порты 80 и