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.