1) #Установка компонентов (кроме nginx)
apt-get update
apt-get upgrade
apt-get install apache2 php7.0 php7.0-cli php7.0-curl php7.0-fpm \
php7.0-mysql apache2 mysql-server mysql-client libapache2-mod-rpaf phpmyadmin \
build-essential apache2-dev \
# В процессе установки не выбираем ничего и просто нажимаем OK в первом окне
# Во втором окне выбираем YES, затем придумываем пароль от базы phpmyadmin нажимаем ок
# подтверждаем его и нажимаем ок
2) # В debian 9 не спрашивает пароль root при установке mariadb
# Поэтому надо задать пароль root в ручную после установки сервера
mysqladmin -u root password 'enter password here'
service mariadb restart
mysql -u root -p mysql
update user set plugin='' where user='root';
flush privileges;
exit
service apache2 stop
apt-get install nginx
service nginx stop
3) # APACHE2
a2dismod mpm_event
a2enmod mpm_worker
a2enmod proxy_fcgi
nano /etc/apache2/ports.conf
#поменять "Listen 80" на "Listen 127.0.0.1:81" (Без кавычек!!)
cd /etc/apache2/sites-available
nano domain_name.conf
#Берём то, что ниже и кидаем в папку
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin admin@domain.com
DocumentRoot /var/www/domain_com/html
ErrorLog ${APACHE_LOG_DIR}/domain_com_error.log
CustomLog ${APACHE_LOG_DIR}/domain_com_access.log vhost_combined
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/domain_com/html"
# Изменить путь в конце строки ProxyPassMatch на путь до корневой папки сайта и остальные параметры под себя
mkdir /var/www/domain_name
mkdir /var/www/domain_name/html
4) #RPAF
# mod_rpaf 0.8.4 В apache2 стоит rpaf 0.6 и он не передаёт принимает порт от nginx и не работает правильно с https который мы будем использовать. Поэтому его надо обязательно обновить.
cd /
wget -O rpaf_v0.8.4.tar.gz https://github.com/gnif/mod_rpaf/archive/v0.8.4.tar.gz
gunzip rpaf_v0.8.4.tar.gz
tar xvf rpaf_v0.8.4.tar
cd mod_rpaf-0.8.4/
make
make install
# Обязательно заменить в /etc/apache2/apache2.conf
# LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
# на
# LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
nano /etc/apache2/mods-available/rpaf.conf
# Привести файл к такому виду
RPAF_Enable On
RPAF_ProxyIPs 127.0.0.1 ::1
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
RPAF_ForbidIfNotProxy Off
RPAF_Header X-Forwarded-For
a2ensite domain_name.conf
service apache2 start
5) #!!!!!!!!! SSL !!!!!!!!!!!!!!!!!!!Certbot!!!!!!!!!!
# https://certbot.eff.org/#debianother-nginx
cd /
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto -d domain_name -d www.domain_name --manual --preferred-challenges dns certonly
# Пишем email в процессе генерирования, поотм A, потом N, потом Y.
# Добавляем в процессе TXT запись в домен и получаем сертификаты для ДВУХ ДОМЕНОВ СРАЗУ
cd /etc/letsencrypt/live/domain_name
# Тут лежат сертификаты и все сгенерированные ботом файлы
# fullchain.pem -- Скртификат домена!!!
# privkey.pem -- Закрытый или приватный ключь!!!
# chain.pem -- Файл с доверенными сертификатами CA!!!
# Делаем ключь Деффи Хеллмана
openssl dhparam -out dhparams.pem 4096
#Ждем очень долго:(
6) #NGINX
# Выключаем сервер если он включен
service nginx stop
nano /etc/nginx/sites-available/domain_name
# Кидаем сюда конфиг который ниже, редактируем под свои задачи и пути
# Меняем пути к сертификатам, пути к папокам с сайтом и имена серверов
server {
listen 80;
listen [::]:80;
server_name www.domain.com domain.com;
return 301 https://domain.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /var/www/domain_com/html;
index index.php index.html index.htm;
server_name www.domain.com domain.com;
location / {
proxy_pass http://127.0.0.1:81;
proxy_redirect off;
set_real_ip_from 94.130.25.79;
real_ip_recursive on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass_header Set-Cookie;
}
location ~ /\.ht {
deny all;
}
location ~* \.(ico|docx|doc|xls|xlsx|rar|zip|jpg|jpeg|txt|xml|pdf|gif|png|css|js|html)$ {
root /var/www/domain_com/html;
}
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header Content-Security-Policy "block-all-mixed-content";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
resolver 8.8.8.8;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/domain.com/chain.pem;
ssl_dhparam /etc/letsencrypt/live/domain.com/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305-D:ECDHE-RSA-CHACHA20-POLY1305-D:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-PSK-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA384:DHE-PSK-AES256-CBC-SHA384:PSK-AES256-CBC-SHA384:HIGH';
}
# создаём символьную ссылку на кинутый конфиг в папке /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/domain_name /etc/nginx/sites-enabled/domain_name
nano /etc/nginx/sites-available/default
# убрать default_server и добавить заплатки для других доменов или ip адреса аналогичным методом
service nginx start
#Создаем index.php Обязательно!!!
nano /var/www/domain_name/html/index.php
#Содержимое
7) #!!!! PHPMYADMIN !!!!!
ln -s /usr/share/phpmyadmin/ /var/www/domain_name/html/phpmyadmin159
8) #Проверка
#Сначала проверим в браузере... ВСЁ ОК!)
# Если надо добавить шифрования то смотрим как они называются отсюда
# Cipher!!
# https://testssl.sh/openssl-rfc.mapping.html
# Чтобы протестировать
# https://www.ssllabs.com
# Потом
# https://hstspreload.org