Назад | Перейти на главную страницу

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

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

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

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

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

Я разрабатываю веб-приложение на PHP на основе фреймворка Symfony.
Чтобы реализовать непрерывную интеграцию с этим приложением, мы запускаем приложение в Докер пример. После успешной сборки в 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;
}

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

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