Apache
Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.
Устанавливаем apache и модуль для php:
apt-get install apache2 libapache2-mod-php
Заходим в настройки портов:
vi /etc/apache2/ports.conf
И редактируем следующее:
Listen 8080
#<IfModule ssl_module>
# Listen 443
#</IfModule>
#<IfModule mod_gnutls.c>
# Listen 443
#</IfModule>
* мы настроили прослушивание на порту 8080, так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443, так как и он будет слушаться NGINX.
Теперь открываем настройку следующего модуля:
vi /etc/apache2/mods-available/dir.conf
И добавляем впереди индексных файлов index.php:
<IfModule dir_module>
DirectoryIndex index.php index.html …
</IfModule>
* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html и так далее.
Открываем основной конфигурационный файл для apache:
vi /etc/apache2/apache2.conf
Рядом с опциями Directory дописываем:
<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
* где Directory указывает на путь, для которого мы хотим задать настройки; AllowOverride — позволит переопределить все настройки с помощью файла .htaccess; Options задает некоторые настройки: Indexes разрешает списки каталогов, ExecCGI разрешает запуск cgi скриптов, Require all granted — предоставляет всем доступ к сайтам в данном каталоге.
Ниже допишем:
<IfModule setenvif_module>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>
* этой настройкой мы при получении заголовка X-Forwarded-Proto со значением https задаем переменную $_SERVER равную on. Данная настройки критична для функционирования некоторых CMS.
Запрещаем mpm_event:
a2dismod mpm_event
* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.
Разрешаем модуль мультипроцессовой обработки mpm_prefork:
a2enmod mpm_prefork
Разрешаем модуль php:
a2enmod php7.4
* в данном примере установлен php версии 7.4.
Разрешаем модуль setenvif:
a2enmod setenvif
Разрешаем модуль rewrite:
a2enmod rewrite
В процессе включения модулей, если мы видим «Module … already enabled», значит модуль уже включен.
Разрешаем автозапуск Apache и перезапускаем службу:
systemctl enable apache2
systemctl restart apache2
Открываем браузер и вводим в адресную строку http://<IP-адрес сервера>:8080. Мы должны увидеть привычную страницу:
* в разделе Server API мы должны увидеть Apache.
NGINX + Apache
Ранее мы настроили связку nginx + php-fpm. Теперь настроим nginx + apache. Открываем конфигурационный файл nginx для сайта по умолчанию:
vi /etc/nginx/sites-enabled/default
Находим наш настроенный location для php-fpm:
…
location ~ \.php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.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
Пробуем открыть в браузере http://<IP-адрес сервера> — должна открыться та же страница, что при проверке Apache (с добавлением 8080):
Apache Real IP
Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.
Создаем конфигурационный файл со следующим содержимым:
vi /etc/apache2/mods-available/remoteip.conf
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1/8
</IfModule>
Активируем модуль:
a2enmod remoteip
Перезапускаем apache:
systemctl restart apache2
Для проверки настройки открываем браузер и вводим в адресную строку http://<IP-адрес сервера>, где откроется наша страница phpinfo. В разделе Apache Environment мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу в опции REMOTE_ADDR.
Общая настройка системы
Установка пакетов
1. Обновляем CentOS:
yum update
2. Устанавливаем репозиторий EPEL и пакет для загрузки:
yum install epel-release wget
Время
1. Устанавливаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* данной командой мы установим часовой пояс по московскому времени.
2. Устанавливаем и запускаем службу для автоматической синхронизации времени:
yum install chrony
systemctl enable chronyd —now
Настройка безопасности
1. Отключаем SELinux:
sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config
setenforce 0
* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.
2. Открываем необходимые порты в брандмауэре:
firewall-cmd —permanent —add-port={80,443,8080}/tcp
firewall-cmd —permanent —add-port={20,21,60000-65535}/tcp
firewall-cmd —reload
* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.
Настройка Phpmyadmin Nginx
Если же вы используете Nginx, то перед тем, как вы сможете открыть веб-интерфейс, вам будет необходимо его включить. Для этого выполните команду:
Тут /var/www/html/phpmyadmin — это папка с вашим проектом. Затем перезапустите php-fpm:
В основной конфигурационный файл nginx.conf, в секцию http добавьте такую команду, это включит поддержку перехода по символическим ссылкам:
И еще, если у вас ISPManager поищите строчку disable_symlinks if_not_owner в настройке сайта и удалите ее иначе тоже ничего не заработает. Перезапустите nginx:
Теперь вы сможете получить доступ к phpmyadmin добавив его адрес к адресу вашего рабочего проекта. Дальше про безопасность. Нам нужно, чтобы к этому адресу могли получить доступ только вы. Несмотря на то, что интерфейс запрашивает пароль, его можно пытаться перебрать, а это для нас очень нежелательно. Во-первых, вы можете переименовать ссылку во что-то более непонятное, например:
Но для большей надежности можно использовать аутентификацию Nginx. Сначала создадим зашифрованный пароль:
Полученное значение нужно скопировать. Дальше создайте файл /etc/nginx/passwords и поместите в него имя пользователя и пароль через двоеточие, например:
Теперь добавьте такой location в файл настройки вашего сайта, адрес pppma, в случае, если вы меняли название ссылки:
Теперь при запросе этого адреса будет спрашиваться пароль.
И только после ввода этого пароля и пароля базы данных вы сможете войти в интерфейс управления.