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