Как маршрутизировать URL-адреса HTTPS через виртуальную среду

У меня проблемы с настройкой безопасной маршрутизации в виртуальной среде. Все HTTP-запросы к веб-сайту и REST API работают нормально.
Сертификат предоставляется компанией, в которой я работаю, и является подстановочным сертификатом для нашего домена.
Моя проблема заключается в расположении сертификата, которое мне недоступно.
Я пробовал настраивать SSL во многих местах, но это работает только частично.

Чтобы опробовать маршруты, я использую Postman и обычный браузер (Chrome).
Я могу успешно посещать веб-страницы, входить в систему, отправлять запросы с помощью JSON в REST API.
Все URL-адреса начинаются с http: // .
Когда я делаю то же самое, но с https: // , браузер показывает, что веб-сайт небезопасен. Почтальон также показывает, что при подключении к URL-адресу произошла ошибка. Этого не происходит с http: // .

Схема выглядит так: Настройка моей виртуальной системы

Сервер шлюза работает как точка входа для нескольких виртуальных машин. Мое приложение работает на одном из них. Шлюз запускает apache2 для облегчения маршрутизации ко всем виртуальным машинам, которые он размещает.
Кроме того, он отвечает за вопросы, связанные с SSL, для всех виртуальных сред.

Я разрабатываю веб-приложение на PHP на основе фреймворка Symfony.
Чтобы реализовать непрерывную интеграцию с этим приложением, мы запускаем приложение в экземпляре Docker . После успешной сборки в Jenkins сценарий запускает новый образ Docker.
Образ Docker запускает сервер Nginx , на котором размещено мое приложение.

Я попытался настроить сертификат в моей конфигурации Nginx и в конфигурации apache2.
Оба безуспешно.
Я обнаружил, что подстановочный сертификат не распространяется на субдомены. Поэтому my-app.development.mycompany.com не будет работать, я полагаю.
Не удалось изменить URL-адреса на development.mycompany.com/my-app/ , потому что приложение PHP уловило часть / my-app / .
Это вызывало проблемы со спецификой маршрутизации приложения и блокировало приложения других виртуальных машин.

Я хотел бы понять, как настроить хост apache2 для обработки SSL. Чтобы иметь возможность разрабатывать больше приложений в этой виртуальной среде в будущем, я хочу настроить ее так, чтобы HTTPS был покрыт для всех виртуальных машин.
Почему эта настройка работает для HTTP, но не для HTTPS?

Конфигурацию виртуального хоста точки входа можно найти ниже

    <VirtualHost *:444>
        ServerName development.mycompany.com
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/certificate_bundle.crt
        SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
        #RewriteEngine on
        ProxyPreserveHost On
 
        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>
 
        #ProxyPass /my-app/ http://my-app.development.mycompany.com:80/
        #ProxyPassReverse /my-app/ http://my-app.developmenet.mycompany.com$
 
                ProxyPass / http://my-app.development.mycompany.com:80/
                ProxyPassReverse / https://my-app.development.mycompany.com:444/
 
        #<Location />
        #        ProxyPass http://my-app.development.mycompany.com:80/
        #        #ProxyPassReverse https://development.mycompany.com:444
        #        ProxyPassReverse http://my-app.development.mycompany.com:80/
        #</Location>
</VirtualHost>
 
<VirtualHost *:80>
ServerName my-app.development.mycompany.com
                <Proxy *>
                               Order Deny,Allow
                               Allow from all
                </Proxy>
                <Location />
                               ProxyPass http://my-app.development.mycompany.com:80/
                ProxyPassReverse http://my-app.development.mycompany.com:80/
 
                               #ProxyPass http://172.30.1.105:80/
                               #ProxyPassReverse http://172.30.1.105:80/
                </Location>
</VirtualHost>
 
<VirtualHost *:80>
ServerName jenkins.my-app.development.mycompany.com
        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>
        <Location />
                               ProxyPass http://my-app.development.mycompany.com:86/
                               ProxyPassReverse http://my-app.development.mycompany.com:86/
 
                #ProxyPass http://172.30.1.105:86/
                #ProxyPassReverse http://172.30.1.105:86/
        </Location>
</VirtualHost>
 
<VirtualHost *:443>
        ServerName my-app.development.mycompany.com
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/certificate_bundle.crt
        SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
 
        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>
        <Location />
                ProxyPass http://my-app.development.mycompany.com:80/
                ProxyPassReverse http://my-app.development.mycompany.com:80/
        </Location>
</VirtualHost>
 
<VirtualHost *:443>
                ServerName development.mycompany.com/my-app
                SSLEngine on
                SSLCertificateFile /etc/apache2/ssl/certificate_bundle.crt
        SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
 
        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>
        <Location />
                ProxyPass http://my-app.development.mycompany.com:80/
                ProxyPassReverse http://my-app.development.mycompany.com:80/
        </Location>
</VirtualHost>
<VirtualHost *:80>
ServerName development.mycompany.com/my-app
        <Proxy *>
                Order Deny,Allow
                Allow from all
        </Proxy>
        <Location />
                ProxyPass http://my-app.development.mycompany.com:80/
                ProxyPassReverse http://my-app.development.mycompany.com:80/
 
                #ProxyPass http://172.30.1.105:80/
                #ProxyPassReverse http://172.30.1.105:80/
        </Location>
</VirtualHost>

Моя конфигурация Nginx выглядит так

    server {
    listen 80;
    listen 444 ssl;
    server_name development.mycompany.com;
    root /var/www/my-app/web;
    client_max_body_size 4048M;

    location / {
         # try to serve file directly, fallback to app.php
         # try_files $uri /app.php$is_args$args;
         index app.php;
         try_files $uri @rewriteapp;
    }

    location @rewriteapp {
         rewrite ^(.*)$ /app.php/$1 last;
    }

    # DEV
    location ~ ^/(app_dev|config)\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_param HTTPS $https;
    }

    # PROD
    location ~ ^/app\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_param HTTPS $https;
        #internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/my_app_error.log;
    access_log /var/log/nginx/my_app_access.log;
}

Любая помощь приветствуется, заранее спасибо.

1
задан 6 October 2017 в 23:48
1 ответ

Обязательно удалите кеш Chrome, открыв инструменты разработчика, затем нажмите 3 точки в правом верхнем углу инструментов разработчика и выберите настройки, внутри настроек выберите Отключить кеш (пока DevTools открыт), затем закройте настройки, перейдите к «i» в Chrome и щелкните его, затем удалите все файлы cookie, связанные с вашим сайтом. Затем щелкните свой веб-сайт и нажмите Ctrl + f5, это приведет к обновлению страницы. если у вас все еще нет https, тогда другой процесс исключения - открыть веб-сайт в таком инструменте, как Gtmetrics, и использовать домен https, это приведет к ошибке, если https не работает. Следующим шагом будет смешанный контент, проверьте источник вашей страницы и выполните поиск HTTP: если вы обнаружите, у вас смешанный контент, и вам нужно будет найти, откуда приходят HTTP-запросы. Убедитесь, что URL-адреса в проходе прокси указаны правильно, с обратной косой чертой и убедитесь, что ваш сертификат является подстановочным знаком или вы используете несколько сертификатов для всех доменов и поддоменов. это базовый контрольный список. Обходом для ваших проблем было бы использование CDN, такого как cloudflare, которое дает бесплатное соединение SSL и будет работать из коробки. Cloudflare также ускорит ваш сайт и защитит от DDoS-атак, число которых растет. Вам просто нужно переписать URL-адреса с HTTP на https, но на самом деле без полной истории, это все, что я могу предложить на данный момент. Надеюсь, вы найдете ответ в предложениях.

0
ответ дан 4 December 2019 в 04:34

Теги

Похожие вопросы