Como rotear URLs HTTPS através de um ambiente virtual

1

Estou com problemas para configurar o roteamento seguro em um ambiente virtual. Todas as solicitações HTTP para o site e a API REST funcionam bem.
O certificado é fornecido pela empresa para a qual trabalho e é um certificado curinga para nosso domínio.
Meu problema é a localização do certificado, que não é acessível para mim.
Eu tentei configurar o SSL em muitos lugares, mas ele só funciona parcialmente.

Para experimentar as rotas, eu uso o Postman e um navegador normal (Chrome).
Posso visitar com êxito as páginas da Web, efetuar login, enviar solicitações com JSON para a API REST.
Todos os URLs começam com http:// .
Quando faço exatamente o mesmo com, mas com https:// , o navegador mostra que o site é inseguro. O Postman também mostra que houve um erro na conexão com a URL. Isso não acontece com http:// .

A configuração é assim: A configuração do meu sistema virtual

Um servidor gateway funciona como um ponto de entrada para várias máquinas virtuais. Meu aplicativo é executado em um deles. O gateway executa o apache2 para facilitar o roteamento para todas as máquinas virtuais que ele hospeda.
Além disso, é o manipulador de assuntos relacionados ao SSL para todos os ambientes virtuais.

Estou desenvolvendo um aplicativo da Web em PHP com base na estrutura do Symfony.
Para implementar a integração contínua com esse aplicativo, executamos o aplicativo em uma instância do Docker . Após uma compilação bem-sucedida no Jenkins, um script faz um novo início de imagem do Docker.
A imagem do Docker executa um servidor Nginx que hospeda meu aplicativo.

Eu tentei configurar o certificado na configuração do Nginx e na configuração do apache2.
Ambos sem um resultado bem sucedido.
Descobri que um certificado curinga não se aplica a sub-subdomínios. Por isso my-app.development.mycompany.com não vai funcionar, suponho.
A alteração dos URLs para development.mycompany.com/my-app/ não foi bem sucedida porque o aplicativo PHP pegou na parte /my-app/ .
Isso causou problemas para os detalhes de roteamento do aplicativo e bloqueia os aplicativos de outras máquinas virtuais.

Eu gostaria de entender como configurar o host apache2 para lidar com SSL. Para poder desenvolver mais aplicativos neste ambiente virtual no futuro, desejo configurá-lo para que o HTTPS seja coberto para todas as máquinas virtuais. Por que essa configuração funciona para HTTP, mas não para HTTPS?

A configuração do host virtual do ponto de entrada pode ser encontrada abaixo

    <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>

Minha configuração do Nginx é semelhante a esta

    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;
}

Qualquer ajuda é bem vinda, obrigado antecipadamente.

    
por Rick Slinkman 05.10.2017 / 20:15

1 resposta

0

Certifique-se de excluir o cache chrome abrindo as ferramentas dev e, em seguida, clique nos 3 pontos no canto superior direito das ferramentas dev e escolha as configurações, escolha configurações Desativar cache (enquanto DevTools estiver aberto) e feche as configurações, vá para o "i" no chrome e clique nele, depois remova os cookies associados ao seu site. Em seguida, clique no seu site e pressione Ctrl + F5 isso vai refrescar a página. Se você ainda não tiver https, outro processo de eliminação é abrir o site em uma ferramenta como o Gtmetrics e usar o domínio https. Isso causará um erro se o https não estiver funcionando. O próximo passo para tentar é misturar o conteúdo, verifique a fonte da sua página e procure por HTTP: se você encontrar, então você tem conteúdo misto e você terá que encontrar onde as solicitações HTTP vêm. Verifique se as URLs no proxy estão corretas com as barras invertidas e verifique se seu certificado é um curinga ou se você está usando vários certificados para todos os domínios e subdomínios. essa é uma lista de verificação básica. Um desvio para os seus problemas seria usar um CDN como o cloudflare, que fornece conexão SSL gratuita e funcionará imediatamente. Cloudflare também irá acelerar o seu site e proteger contra ataques DDoS que está em ascensão. Você só tem que reescrever os URLs de HTTP para https, mas realmente sem a história completa, é tudo que posso sugerir no momento. Espero que você encontre sua resposta dentro das sugestões.

    
por 07.10.2017 / 00:08