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.

4voto

sliks Points 91

J'essaie de rediriger un elastic beanstalk avec loadbalancer en 2018. Aucune des réponses ci-dessus ne fonctionne dans mon environnement. J'ai rencontré plusieurs problèmes :

  1. J'ai essayé la réponse la plus votée, mais mon tomcat est en version 2.7. Il ne prend pas en charge les fichiers .

  2. J'utilisais container_commands et je copiais le paramètre 00_applications. AWS l'ignore tout simplement.

J'ai finalement réussi à le faire fonctionner en lisant ceci : https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html

Voici ce que je fais :

J'ai recréé la structure du dossier :

.ebextensions 
 - httpd
  -conf.d
   -ssl.conf

Et puis voici le contenu de ssl.conf

<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  <Proxy *>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

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

J'espère que cela vous aidera.

3voto

Roy Shmuli Points 3584

Ça marche pour moi avec la commande suivante :

RewriteCond %{HTTP:X-Forwarded-Port} !=443

et sans la vérification https :

RewriteCond %{HTTP:X-Forwarded-Proto} !https

Il semble que ELB ait changé la valeur de X-Forwarded-Proto en http (même sur le protocole TCP).

2voto

yerself Points 38

J'ai eu du mal à comprendre, donc après avoir trouvé une solution, j'ai écrit une explication détaillée de ma solution pour espérer aider quelqu'un d'autre. Ceci est spécifique à Tomcat 8, Apache2 et l'application Spring Boot. Il y a de très utiles Exemples d'ebextension dans le github d'AWS labs .

Résumé de ce qui a fonctionné pour moi :

  1. Créer un fichier dans /src/main/webapp/.ebextensions/httpd/conf.d/elasticbeanstalk.conf
  2. Ajouter les conds/rules de réécriture en prenant soin d'inclure "LoadModule rewrite_module modules/mod_rewrite.so".
  3. Déployer vers AWS EBS

Voici un exemple d'application Spring Boot .

2voto

Adi Points 1329

Sur elastic beanstalk, vous pouvez simplement ajouter votre propre configuration pour que AWS écrase la sienne, ce qui vous permettra d'écraser la configuration du serveur web et de soumettre votre propre configuration.

Il suffit d'ajouter le fichier suivant sous le chemin : .ebextensions \httpd\conf.d

Contenu du fichier :

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

Le dossier '.ebextensions' est le dossier de configuration standard dans AWS et le reste indique simplement le fichier et le dossier que vous souhaitez écraser. Si le fichier ou le dossier n'existe pas, il suffit de le créer.

1voto

aelve Points 59

J'ai les configurations suivantes pour elastic beanstalk (64bit Amazon Linux 2016.09 v2.3.1 exécutant Tomcat 8 Java 8). J'ai créé un répertoire .ebextensions et ajouté un fichier YAML .config avec les conditions de réécriture.

Zagas solution décrite ci-dessus (qui est très complexe) ne fonctionne pas pour moi.

  1. Parce que la condition "Si" est inconnue
  2. À cause d'Apache 2.2, je n'ai pas inclus mod_rewrite.so dans mon fichier httpd.conf.

Cette solution ont plus de sens pour moi, mais aussi cela ne fonctionne pas. Rien ne se passe, et je ne vois pas le fichier "ssl_rewrite.conf" dans le répertoire "conf.d".

La troisième solution essayée était d'ajouter les fichiers "run.config" et "ssl_rewrite.conf" dans le répertoire ".ebextendsion".

run_config contient

container_commands:
copy-config:
command: "cp .ebextensions/ssl_rewrite.conf /etc/httpd/conf.d"

ssl_rewrite.conf contient

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

ssl_rewrite.conf est créé dans le répertoire "conf.d" mais la redirection de http à https ne fonctionne pas.

La seule solution qui a fonctionné pour moi a été d'ajouter les lignes suivantes dans "/etc/httpd/conf.d/elasticbeanstalk/00_application.conf".

<VirtualHost *:80>
......
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
......
</VirtualHost>

mais c'est une solution temporaire et si une machine est remplacée, ma redirection https disparaît.

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