88 votes

Comment forcer https sur elastic beanstalk ?

Je n'arrive pas à forcer https sur le niveau d'utilisation gratuit d'elastic beanstalk.

J'ai essayé la suggestion suivante à Comment forcer https sur amazon elastic beanstalk sans échouer le contrôle de santé ?

En utilisant cette règle de réécriture Apache

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/status$ 
RewriteCond %{REQUEST_URI} !^/version$ 
RewriteCond %{REQUEST_URI} !^/_hostmanager/ 
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Lorsque j'essaie cela, les demandes http ne sont pas redirigées vers https comme je le voudrais. Au contraire, la page http se charge normalement. J'ai également essayé d'utiliser l'en-tête X-Forwarded-Port avec le même résultat.

J'ai également essayé la règle de réécriture suivante

RewriteCond %{SERVER_PORT} 80
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Et cette règle provoque une boucle de redirection. Il semblerait donc que les règles de réécriture d'Apache ne détectent pas les en-têtes X-Forwarded-Port et X-Forwarded-Proto d'Elastic Load Balancer, mais une boucle de redirection n'est pas non plus ce que je recherche.

Aidez-moi, s'il vous plaît. Je suis nouveau sur AWS, Elastic Beanstalk, et je ne suis pas très familier avec les règles Apache. Je ne sais pas trop où aller à partir de là. Merci.

1voto

Joao Gavazzi Points 802

Juste au cas où quelqu'un aurait encore des difficultés :

J'ai lutté pendant un certain temps et finalement, j'ai trouvé un GitHub (de l'équipe AWS) avec toutes les configurations AWS et l'exemple ci-dessous fonctionne pour la redirection HTTP>HTTPS pour Apache 2.2. (Pour les configurations pour Apache 2.4 et Nginx, veuillez voir le lien ci-dessous).

Apache 2.2

  1. Créez un fichier dans le répertoire racine de votre application : VOTRE_PROJET_ROOT/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (En cas d'utilisation d'IntelliJ / Java, assurez-vous qu'il est ajouté au fichier WAR final).

  2. Ajoutez les lignes suivantes pour activer la redirection dans l'hôte virtuel :

    <VirtualHost *:80>
        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:8080/ retry=0
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost on
    
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
    </VirtualHost>

Pour plus d'exemples pour Apache 2.4 et Nginx, veuillez visiter ce dépôt GitHub :

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/java-tomcat

En outre, de nombreux autres exemples et configurations utiles sont disponibles.

Salutations

1voto

nbeuchat Points 1708

Activation de HTTPS par une variable d'environnement

J'avais besoin de faire respecter le protocole HTTPS uniquement pour notre environnement de production, et non pour les environnements de développement et de préparation qui sont également sur Elastic Beanstalk mais n'utilisent pas d'équilibreur de charge (et ne peuvent donc pas se voir attribuer un certificat directement).

J'utilise une variable d'environnement USE_HTTPS . Nous copions le ssl_rewrite.conf si et seulement si USE_HTTPS est réglé sur true .

.ebextensions/files/ssl_rewrite.conf

RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</If>

.ebextensions/https.config

files:
  "/home/ec2-user/https_setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      echo "USE_HTTPS env var: ${USE_HTTPS,,}"
      outfile=/etc/httpd/conf.d/ssl_rewrite.conf
      if [ "${USE_HTTPS,,}" == "true" ]; then
        echo "Configure SSL rewrite"
        cp .ebextensions/files/ssl_rewrite.conf $outfile
        chmod 644 $outfile
        chown root:root $outfile
      else
        [ -f $outfile ] && rm $outfile
        echo "Do not use SSL"
        exit 0
      fi

container_commands:
  01_https_setup:
    command: "/home/ec2-user/https_setup.sh"

Notez que si vous modifiez USE_HTTPS vous devez redéployer votre application pour que le changement prenne effet. Vous pouvez également supprimer le echo dans les https.config si vous le souhaitez.

1voto

Xen_mar Points 750

AWS a également documentation sur ce sujet.

Si vous utilisez un équilibreur de charge d'application, ajoutez le fichier http-to-https.config à votre .ebextensions et ajoutez ensuite la configuration suivante ( N'oubliez pas de mettre l'ARN de votre certificat https. ):

NOTE : Assurez-vous que vous n'avez pas encore ajouté un listener sur le port 443 via la console EB. Si vous l'avez fait, supprimez le listener avant d'ajouter le fichier .config.

Resources:
  AWSEBV2LoadBalancerListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      DefaultActions:
        - Type: redirect
          RedirectConfig:
            Protocol: HTTPS
            Port: '443'
            Host: '#{host}'
            Path: '/#{path}'
            Query: '#{query}'
            StatusCode: HTTP_301
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 80
      Protocol: HTTP
  AWSEBV2LoadBalancerListenerHTTPS:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      Certificates:
        - CertificateArn: Replace with Certificate ARN
      DefaultActions:
        - Type: forward
          TargetGroupArn:
            Ref: AWSEBV2LoadBalancerTargetGroup
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 443
      Protocol: HTTPS 

L'avantage d'utiliser votre LB pour cela est que votre configuration sera agnostique au serveur que vous utilisez comme nginx, apache, etc.

1voto

ARTHUR SOMMER Points 11

J'ai trouvé une réponse de ici pour être utile.

Tout ce que j'ai fait, c'est de faire le parcours de santé /index.php au lieu de / dans le processus par défaut de l'équilibreur de charge d'application.

0voto

Timo Points 1

Pourquoi ne pas simplement placer un fichier .htaccess dans le dossier racine ? De cette façon, vous pouvez simplement le tester et le déboguer. Et si vous l'incluez dans le fichier .zip, il sera à nouveau automatiquement déployé sur toutes les instances.

Il suffit d'utiliser .htaccess :

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X