Skip to content

Instantly share code, notes, and snippets.

@numbnet
Last active June 13, 2021 23:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save numbnet/6baba4e2353ef05a3b12ddfd4fbb4502 to your computer and use it in GitHub Desktop.
Save numbnet/6baba4e2353ef05a3b12ddfd4fbb4502 to your computer and use it in GitHub Desktop.
NGINX + Apache (httpd) + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на CentOS 8

NGINX + Apache (httpd) + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на CentOS 8

Описание

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

Тематические термины: Linux, CentOS, NGINX, Apache, MySQL, MariaDB, PHP-FPM, FTP, phpMyAdmin, Memcached, Postfix.

Содержание:

Общая настройка системы

Установка NGINX

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

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

Установка phpMyAdmin

Установка Memcached

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

Apache (httpd)

Postfix

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

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

Общая настройка системы

##********************************

## Установка пакетов

1. Обновляем CentOS:

dnf update

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

dnf install epel-release wget unzip

##********************************

## Время

1. Устанавливаем часовой пояс:

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

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

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

dnf install chrony

systemctl enable chronyd

systemctl start chronyd

##********************************

## Настройка безопасности

1. Отключаем SELinux:

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

setenforce 0

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

2. Открываем необходимые порты в брандмауэре:

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

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); 25, 465 и 587 порты нужны для работы почтового сервера по SMTP; последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.> /p>

Установка NGINX

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

dnf install nginx

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

nano /etc/nginx/nginx.conf

В секцию http добавим строку:

http { ... server_names_hash_bucket_size 64; .... }

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

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

systemctl enable nginx

systemctl start nginx

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

Заголовок Welcome to nginx!

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

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

Устанавливаем PHP и php-fpm следующей командой:

dnf install php php-fpm

* В CentOS 8 будет установлена версия php 7.2 и выше> /p>

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

systemctl enable php-fpm --now

##********************************

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

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

nano /etc/nginx/nginx.conf

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

location / { index index.php index.html index.htm; }

* добавляем index.php в начало списка. Если параметра index нет, создаем его.> /p>

А внутри секции 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.> /p>

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

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

Проверяем, что параметр listen настроен так:

listen = /run/php-fpm/www.sock

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

systemctl restart php-fpm

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

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

nginx -t

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

systemctl restart nginx

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

nano /usr/share/nginx/html/index.php

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

Информация о php (phpinfo)

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

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

Устанавливаем MariaDB следующей командой:

dnf install mariadb mariadb-server

* для установки mysql выполняем команду dnf install mysql > /p>

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

systemctl enable mariadb --now

* для работы с mysql меняем mariadb на mysql .> /p>

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

mysqladmin -u root password

##********************************

## PHP + MariaDB (MySQL)

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

dnf install php-mysqli

Если мы установили php5, также ставим php-mysql:

dnf install php-mysql

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

systemctl restart php-fpm

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

В phpinfo появилась информация о поддержке MySQL

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

Установка phpMyAdmin

Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:

Копируем ссылку на последнюю версию phpMyAdmin

Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:

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

unzip phpMyAdmin-*-all-languages.zip

Создаем каталог для phpmyadmin:

mkdir /usr/share/phpMyAdmin

... и переносим в него содержимое распакованного архива:

mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/

Задаем владельца для каталога:

chown -R apache:apache /usr/share/phpMyAdmin

* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache .> /p>

Устанавливаем модули php, необходимые для корректной работы phpMyAdmin:

dnf install php-json php-mbstring php-mysqli

Внесем небольшую настройку в конфигурацию phpMyAdmin.

Сгенерируем случайную последовательность символов:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''

Откроем на редактирование или создадим файл:

nano /usr/share/phpMyAdmin/config.inc.php

Внесем в него строку:

?>

* где jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR — последовательность, которую нам выдала команда head /dev/urandom ... ; Также обратите внимание на — если мы создали новый файл, необходимо указать данные теги, так как они открывают код PHP. В противном случае, настройка не применится.

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

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

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

server { listen 80; server_name phpmyadmin.dmosk.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.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.> /p>

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

systemctl reload nginx

Также нужно перезапустить php-fpm, так как в процессе установки были добавлены модули для PHP:

systemctl restart php-fpm

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

Установка Memcached

Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.

##********************************

## Сервис memcached

Выполняем установку пакетов:

dnf install memcached libmemcached

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

nano /etc/sysconfig/memcached

Приводим его к виду:

PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="512" OPTIONS="-l 127.0.0.1 -U 0"

* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).> /p>

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached --now

##********************************

## Модуль для php

Переходим на страницу загрузки memcached сайта pecl.php.net и копируем ссылку на стабильную версию memcached:

Копируем ссылку на исходник memcached

Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера.

Скачиваем архив, ссылку на который мы скопировали:

Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:

dnf install php-devel zlib-devel make

dnf --enablerepo=PowerTools install libmemcached-devel

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

tar -xvzf memcached-*.tgz

Переходим в распакованный каталог:

cd memcached-*/

Запускаем компиляцию php-расширения:

phpize

Конфигурируем исходник:

./configure

Собираем расширение:

make

Копируем созданный модуль в каталог php-модулей:

cp modules/memcached.so /usr/lib64/php/modules/

Создаем конфигурационной файл для подключения расширения:

nano /etc/php.d/20-memcached.ini

extension=memcached.so

После установки модуля перезапускаем php-fpm:

systemctl restart php-fpm

Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

В phpinfo появилась информация о поддержке Memcached

... или вводим команду:

php -m | grep memcached

Мы должны получить:

memcached

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

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

ProFTPd можно устанавливать командой:

dnf install proftpd

Загружаем скрипт ftpasswd:

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

chmod +x /etc/proftpd/ftpasswd

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

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

* где> /p>

  • /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...»> /p>

Открываем на редактирование конфигурационный файл 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 — диапазон динамических портов для пассивного режима.> /p>

Разрешаем автозапуск 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

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

nano /etc/httpd/conf/httpd.conf

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

Listen 8080

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

DirectoryIndex index.php index.html

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

Добавляем:

AllowOverride All Options Indexes ExecCGI FollowSymLinks Require all granted

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

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

apachectl configtest

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

Syntax OK

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

systemctl enable httpd

systemctl start httpd

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

nano /var/www/html/index.php

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080 (http://:8080 ). Откроется привычная нам страница с информацией о PHP. В разделе «PHP Variables» мы должны увидеть Apache для опции $_SERVER['SERVER_SOFTWARE']:

Страницу с phpinfo загрузил Apache

##********************************

## NGINX + Apache

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

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

nano /etc/nginx/nginx.conf

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

... 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; } ...

и меняем на:

... 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; } ...

Проверяем, есть ли файл:

nano /etc/nginx/default.d/php.conf

... и если есть, комментируем его содержимое:

#index index.php index.html index.htm; # #location ~ \.(php|phar)(/.*)?$ { # fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$; # # fastcgi_intercept_errors on; # fastcgi_index index.php; # include fastcgi_params; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_param PATH_INFO $fastcgi_path_info; # fastcgi_pass php-fpm; #}

* в данном примере мы отключили обработку всех php-файлов с помощью php-fpm, так как это у нас должен делать apache.> /p>

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

nginx -t

systemctl restart nginx

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

Страницу с phpinfo загрузил Apache

##********************************

## Apache Real IP

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

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

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

Переходим в каталог /usr/local/src:

cd /usr/local/src

Скачиваем модуль:

Распаковываем его:

unzip stable.zip

Переходим в распакованный каталог:

cd mod_rpaf-stable/

Собираем модуль и устанавливаем его:

make

make install

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

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

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

Для проверки открываем нашу страницу с phpinfo и находим $_SERVER['REMOTE_ADDR'] — его значение должно быть равно адресу компьютера, с которого мы открыли страницу:

Реальный IP-адрес при обращении к Apache

Postfix

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

dnf install postfix

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

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 указывает на карту с общими правилами пересылки. > /p>

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

nano /etc/postfix/generic_map

И добавляем:

@dmosk.local no-reply@dmosk.local

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

Создаем карту:

postmap /etc/postfix/generic_map

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

systemctl restart postfix

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

##********************************

## PHP

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

nano /etc/php.ini

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

upload_max_filesize = 512M ... post_max_size = 512M ... short_open_tag = On ... date.timezone = "Europe/Moscow"

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

systemctl restart php-fpm

systemctl restart httpd

##********************************

## NGINX

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

nano /etc/nginx/nginx.conf

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

client_max_body_size 512M;

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

systemctl restart nginx

Подробнее про тюнинг NGINX в статье Практические советы по тюнингу веб-сервера NGINX.

##********************************

## Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

  1. Прописать PTR-запись.
  2. Создать запись SPF.
  3. Настроить DKIM.

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

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

TMP_SITE=webits

* где webits — имя домена. Нам будет намного удобнее копировать и вставлять команды с переменной (не придется править после копипасты).> /p>

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

nano /etc/nginx/conf.d/$TMP_SITE.conf

* обязательно на конце должен быть .conf , так как только такие файлы веб-сервер подгружает в конфигурацию.> /p>

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

Для HTTP:

server { listen 80; server_name webits.com.ua www.webits.com.ua ; set $root_path /var/www/webits /www; access_log /var/www/webits /log/nginx/access_log; error_log /var/www/webits /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;
}

}

* где webits.com.ua — домен, для которого создается виртуальный домен; /var/www/webits — каталог, в котором будет размещаться сайт. ** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее). *** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.> /p>

Для HTTPS:

server { listen 80; server_name webits.com.ua www.webits.com.ua ; return 301 https://$host$request_uri; }

server { listen 443 ssl; ssl on;

ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
server_name  <strong>webits.com.ua www.webits.com.ua

; set $root_path /var/www/webits /www; access_log /var/www/webits /log/nginx/access_log; error_log /var/www/webits /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;
}

}

* в первой секции server мы перенаправляем все запросы по незащищенному http на https . ** ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно. *** для получения бесплатного сертификата читайте статью Получение бесплатного SSL сертификата Let's Encrypt.> /p>

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

nano /etc/httpd/conf.d/$TMP_SITE.conf

Define root_domain webits.com.ua Define root_path /var/www/webits 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

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

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

Hello from webits"; ?>

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

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

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

Не забываем, что обращаться к сайту нужно по его доменному имени. Например, если мы создали сайт webits.com.ua, то нужно в браузере набрать http://webits.com.ua . При этом, данное имя должно разрешаться в IP-адрес с помощью DNS или локального файла hosts.

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

mysql -uroot -p

> CREATE DATABASE webits DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON webits.* TO dbuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

* данными sql-командами мы создаем базу данных webits и предоставляем к ней доступ для учетной записи dbuser с паролем password . При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment