mod_rewrite - A regra de redirecionamento HTTP para HTTPS funciona somente depois de acessá-lo através do HTTP primeiro

1

Eu tenho um aplicativo Tomcat 8 implantado no Elastic Beanstalk, que usa um subdomínio do meu aplicativo principal. Ambos são aplicativos separados e não interagem. Eu tenho uma regra de mod_rewrite para redirecionar todas as solicitações http para https em um arquivo de configuração na pasta .ebextensions -

files:
  "/etc/httpd/conf.d/httpd_redirect.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule rewrite_module modules/mod_rewrite.so
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule (.*) https://sub.domain.com%{REQUEST_URI} [L,R]

Então, o ideal é que alguém que acesse o aplicativo em sub.domain.com ou http://sub.domain.com seja redirecionado para https://sub.domain.com .

O problema é que isso funciona somente depois que eu solicito o aplicativo com https primeiro. Então, tenho que solicitar https://sub.domain.com primeiro e, a partir de então, non-https solicitações serão redirecionadas para https .

Além disso, isso só funciona até eu limpar o cache do meu navegador. Depois que o cache for limpo, as solicitações non-https não serão mais redirecionadas para https . Eu fiz uma solicitação https novamente para o redirecionamento começar a funcionar.

O que poderia estar causando isso? O domínio principal usa um certificado separado do subdomínio, se for importante.

Como posso forçar o aplicativo a sempre usar https ?

Eu tenho um ouvinte seguro ativado no balanceador de carga com este arquivo de configuração em .ebextensions -

option_settings:
  aws:elb:listener:443:
    SSLCertificateId: arn:aws:acm:us-east-2:1234567890123:certificate/####################################
    ListenerProtocol: HTTPS
    InstancePort: 80
    
por Anish Sana 04.01.2018 / 18:38

1 resposta

0

O problema não estava na regra de reescrita. O arquivo tinha que ser colocado em um caminho específico dentro de .ebextensions para que funcionasse no Tomcat 8. Os arquivos de configuração também precisavam ser configurados de maneira diferente. A maioria dos exemplos fornecidos não eram para o Tomcat, então acabei colocando-os no local errado.

O que funcionou -

Em /.ebextensions/httpd/conf.d/myconf.conf , coloque -

LoadModule rewrite_module modules/mod_rewrite.so

e em /.ebextensions/httpd/conf.d/elasticbeanstalk/00_application.conf , lugar -

<VirtualHost *:80>
  <Proxy *:80>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  RewriteEngine On
  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>

Anote o uso de arquivos .conf em vez de .config . Isso é importante!

Além disso, a falsa sensação de redirecionamento que eu estava recebendo era devido ao cache do navegador que me servia o https site. É por isso que não funcionaria quando eu limpar meu cache.

    
por 06.01.2018 / 01:07