Как включить SSL и протокол HTTPS на связке Apache2 + Nginx proxy

С некоторых пор google рекомендует переход на защищенный протокол https, это не всегда обязательно, и требуется только для страниц содержащих формы для введения конфиденциальных данных. Еще очень много сайтов продолжает использовать незащищенный протокол, и возможно кому то пригодится информация по внедрению ssl. Информация предоставлена связки серверов где Apache2 backend, а Nginx frontend.

Как включить SSL и протокол HTTPS на связке Apache2 + Nginx...

Включаем ssl на nginx и apache2

Я не стал разбивать конфиг nginx на отдельные файлы, чтобы вы не путались, а выложил полный . В нем включено два блока server. Первый блок оставляет поддержку работы сайта на 80 порту. Второй включает поддержку ssl и http2 и работает на 443 порту. Если у вас еще нет сервера nginx — прочитайте как установить его установить

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

sudo nano /etc/nginx/conf.d/mysite.conf

Вставим написанный ниже конфиг и сохраним.

# 2 Блока server, если вы вдруг планируете пользоваться http на 80 порту.
# Кэширование статики
map $sent_http_content_type $expires {
    default               off;
    ~css                  max;
    ~javascript           max;
    ~image                max;
    ~font-*               max;
    ~video                max;
    ~zip                  max;
    ~gz                   max;
    ~txt                  max;
  }
expires                 $expires;

server {
listen 80;
    server_name ваш-сайт.рф;
    root /home/troyan/www;
    index index.php index.html;             

gzip                    on;
gzip_min_length         128;
gzip_http_version       1.1;
gzip_buffers           128 32k;
gzip_types
    text/css
    text/javascript
    text/xml
    text/plain
    text/x-component
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/rss+xml
    application/atom+xml
    font/truetype
    font/opentype
    application/vnd.ms-fontobject
    image/svg+xml;
gzip_static  on;    
gzip_proxied            expired no-cache no-store private auth;
gzip_disable            "msie6";
gzip_vary                on;

location / {
   proxy_pass http://127.0.0.1:88;
   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;
   }
}  
  
server {
# Включаем поддержку ssl на 443 порту и новый протокол HTTP2
   listen 443 ssl http2;
   server_name ваш-сайт.рф;
# Директория в которой находится сайт
   root /home/troyan/www;
# Индексные файлы. index.php - нужен для работы php
   index index.php index.html; 
# Включаем ssl          
   ssl on;
# Добавляем сертификаты. Бесплатный можно создать себе с помощью letsencrypt
   ssl_certificate /etc/letsencrypt/live/wp.playserver.net/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/wp.playserver.net/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/wp.playserver.net/chain.pem;
# Данный ключ генерируется отдельно. Нужен чтобы заработал Forward Secrecy. 
    ssl_dhparam /etc/letsencrypt/live/wp.playserver.net/dhparam.pem;
# Включаем кэширование ssl
     ssl_session_cache shared:SSL:10m;
# Время кэширования ssl
     ssl_session_timeout 10m;
     ssl_prefer_server_ciphers On;
     ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
     ssl_stapling on;
     ssl_stapling_verify on;
     ssl_buffer_size 4k;
     resolver 77.88.8.8 77.88.8.1 valid=60s;
     resolver_timeout 5s;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

# Включаем сжатие gzip nginx
gzip                    on;
gzip_min_length         128;
gzip_http_version       1.1;
gzip_buffers           128 32k;
gzip_types
    text/css
    text/javascript
    text/xml
    text/plain
    text/x-component
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/rss+xml
    application/atom+xml
    font/truetype
    font/opentype
    application/vnd.ms-fontobject
    image/svg+xml;
gzip_static  on;    
gzip_proxied            expired no-cache no-store private auth;
gzip_disable            "msie6";
gzip_vary                on;

location / {
   proxy_pass http://127.0.0.1:88;
   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;
   } 
}

Теперь переходим к настройке apache2. В моем случае apache2 v2.4.
Возможно сервер у вас не установлен и вы делаете все впервые. Вам нужно установить apache2

apt install apache2 libapache2-mod-php7.0

И уже после этого перейти к редактированию файла apache2.conf
Открываем:

sudo nano /etc/apache2/apache2.conf

Вставляем в самое начало файла:

ServerName 127.0.0.1

Сохраняем.
Так же нужно прописать порт на котором будет «висеть» apache.
Открываем:

sudo nano /etc/apache2/port.conf

находим строку listen 80 меняем ее на

Listen 88

Сохраняем.

  Установка php 7.1 на ubuntu. Настройка php7.1

Создаем конфигурационный файл Apache2 с поддержкой ssl на nginx

nano /etc/apache2/sites-available/my-site.ru

Редактируем написанное ниже

<VirtualHost *:88>
  ServerName ваш-сайт.рф
  #Директория в которой находится сайт
  DocumentRoot /путь/к папке/с сайтом/
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  RewriteEngine On
<Directory /путь/к папке/с сайтом/>
  php_admin_flag engine on
  Options -ExecCGI -Indexes +FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
</VirtualHost>

Сохраняем.

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

sudo apt install unzip build-essential apache2-dev

Загружаем архив

wget https://github.com/gnif/mod_rpaf/archive/stable.zip

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

unzip stable.zip

Переходим в папку распакованного исходника

cd mod_rpaf-stable

Компилируем

make

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

make install

Все модуль установлен. Далее создадим файлы с кофигурацией и активируем его

sudo nano /etc/apache2/mods-available/rpaf.load

Вставим в этот файл путь к загрузке модуля

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

Сохраним.
Создадим конфигурационный файл модуля rpaf

sudo nano /etc/apache2/mods-available/rpaf.conf

Вставим в него

<IfModule mod_rpaf.c>
    RPAF_Enable             On
    RPAF_Header             X-Real-Ip
    RPAF_ProxyIPs           127.0.0.1
    RPAF_SetHostName        On
    RPAF_SetHTTPS           On
    RPAF_SetPort            On
</IfModule>

Сохраним. И активируем модуль.

sudo a2enmod rpaf

Включаем сайт:

sudo a2ensite my-site.ru

Назначаем права для директории в которой расположен ваш сайт.

chown -R www-data:www-data /путь/к сайту/

Далее перезагружаем apache и nginx

systemctl restart apache2
systemctl restart nginx

Проверяем работу кофига. Вопросы пишем в комментарии.

  Установка веб сервера nginx на Ubuntu , linux

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here