web-dev-qa-db-fra.com

Comment forcer https sur un haricot élastique?

Je n'arrive pas à forcer https sur le niveau d'utilisation libre de beanstalk élastique.

J'ai essayé la suggestion suivante sur Comment forcer https sur un beanstalk Amazon sans échouer à la vérification de l'état de santé

Utilisation de 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 requêtes http ne sont pas redirigées vers https comme je le voudrais. Au lieu de cela, 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 aussi 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. Ainsi, il semblerait que les règles de réécriture Apache ne prennent pas les en-têtes Elastic Load Balancer X-Forwarded-Port et X-Forwarded-Proto, mais une boucle de redirection n'est pas ce que je recherche non plus.

S'il vous plaît aider. Je suis nouveau sur AWS, Elastic Beanstalk et je ne connais pas très bien les règles Apache. Je ne sais pas trop où aller à partir d'ici. Merci.

66
landland

Cette réponse suppose que vous avez déjà activé https dans le groupe de sécurité de l'équilibreur de charge, ajouté le certificat SSL à l'équilibreur de charge, ajouté 443 aux ports transférés par l'équilibreur de charge et pointé votre nom de domaine sur l'environnement Elastic Beanstalk avec Route 53 (ou service DNS équivalent).

REMARQUE: cette réponse concerne les environnements Elastic Beanstalk utilisant Apache. Il se peut également que cela ne fonctionne pas pour un déploiement basé sur un menu fixe.

Tout ce que vous avez à faire est d’ajouter ce qui suit à l’un de vos fichiers .config dans le répertoire .ebextensions de votre projet :

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            RewriteEngine On
            <If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
            RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
            </If>

Explication

Ceci est modérément simple en dehors de Elastic Beanstalk. On ajoute généralement une règle de réécriture Apache comme suit:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

Ou, si derrière un équilibreur de charge, comme nous sommes dans ce cas:

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

Cependant, ces configurations ne fonctionnent que dans un bloc <VirtualHost>. Changer la variable RewriteCond en un bloc <If> lui permet de fonctionner correctement en dehors d'un bloc <VirtualHost>, ce qui nous permet de l'insérer dans un fichier de configuration Apache autonome. Notez que la configuration standard Apache sur CentOS (y compris la configuration sur ElasticBeanstalk) inclut tous les fichiers correspondant à /etc/httpd/conf.d/*.conf, ce qui correspond au chemin du fichier dans lequel nous stockons ce fichier.

La partie -n '%{HTTP:X-Forwarded-Proto}' de la condition l'empêche de rediriger ses tâches si vous ne vous trouvez pas derrière un équilibreur de charge, ce qui vous permet de partager la configuration entre un environnement de production avec un équilibreur de charge et https et un environnement intermédiaire unique et dépourvu de https. Cela n'est pas nécessaire si vous utilisez des équilibreurs de charge et https sur tous vos environnements, mais cela ne fait pas de mal de l'avoir.

Mauvaises solutions que j'ai vues

J'ai vu beaucoup de mauvaises solutions à ce problème, et il est intéressant de les parcourir pour comprendre pourquoi cette solution est nécessaire.

  1. Use Cloudfront: Certaines personnes suggèrent d'utiliser une configuration Cloudfront non mise en cache devant Elastic Beanstalk pour effectuer la redirection HTTP vers HTTPS. Cela ajoute un tout nouveau service (donc une complexité accrue) qui n’est pas tout à fait approprié (Cloudfront est un CDN; ce n’est pas le bon outil pour forcer HTTPS sur un contenu intrinsèquement dynamique). Apache config est la solution normale à ce problème et Elastic Beanstalk utilise Apache, c'est donc la voie à suivre.

  2. SSH sur le serveur et ...: Ceci est complètement opposé au point d'Elastic Beanstalk et a tellement de problèmes. Toutes les nouvelles instances créées par autoscaling n'auront pas la configuration modifiée. Tous les environnements clonés n'auront pas la configuration. N'importe quel nombre d'un ensemble raisonnable de modifications de l'environnement effacera la configuration. C'est juste une si mauvaise idée.

  3. Remplacez la configuration Apache par un nouveau fichier: Cela entre dans le bon domaine de solution mais vous laisse avec un cauchemar de maintenance si Elastic Beanstalk modifie des aspects de la configuration du serveur (ce qu’ils pourraient très bien faire). Voir aussi les problèmes dans l’article suivant.

  4. Editez dynamiquement le fichier de configuration Apache pour ajouter quelques lignes: C'est une idée décente. Le problème, c’est que cela ne fonctionnera pas si Elastic Beanstalk change jamais le nom de son fichier de configuration Apache par défaut, et que ce fichier peut être écrasé à la moindre attente: https://forums.aws.Amazon.com /thread.jspa?threadID=163369

153
Zags

EDIT: Bien que j'adore cette réponse, elle est maintenant très ancienne. AWS a mis au point de nouveaux services (tels que Certificate Manager ) qui rendent une partie de cette réponse obsolète. De plus, utiliser le dossier .ebextensions avec Apache est une méthode plus simple pour gérer cette redirection, comme expliqué ci-dessus.

Si vous hébergez votre site Web sur S3, il se peut que certaines parties de cette réponse vous soient utiles.


Cela a fonctionné pour moi:

  1. Téléchargez le certificat sur AWS à l'aide de la commande aws console. La structure de commandement est la suivante:

    aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/
    
  2. Dans votre application Elastic Beanstalk, accédez à Configuration -> Niveau réseau -> Equilibrage de charge et cliquez sur l'icône engrenage.

  3. Sélectionnez Port d'écoute sécurisé sous la forme 443. Sélectionnez Protocole comme HTTPS. Sélectionnez le CERTIFICATE_NAME dans étape 2 pour ID de certificat SSL. Enregistrez la configuration.

  4. Allez dans votre Console. Cliquez sur EC2 Instances. Cliquez sur Load Balancers. Cliquez sur les équilibreurs de charge. Cliquez sur Instances et faites défiler pour afficher les instances EC2 affectées à cet équilibreur de charge. Si l'instance EC2 a le même nom que votre URL d'application (ou quelque chose de proche), notez nom DNS pour l'équilibreur de charge. Il devrait être au format awseb-e-...

  5. Retournez à votre Console. Cliquez sur CloudFront. Cliquez sur Créer une distribution. Sélectionnez une distribution Web.

  6. Configurez la distribution. Définissez votre nom de domaine d'origine sur le nom DNS de l'équilibreur de charge trouvé dans step 5. Définissez la stratégie de protocole Viewer sur Redirect HTTP to HTTPS. Définissez Forward Query Strings sur Yes. Définissez Noms de domaine alternatifs (CNAME) sur les URL à utiliser pour votre application. Définissez SSL Certificate sur le CERTIFICATE_NAME que vous avez chargé à step 2. Créez votre distribution.

  7. Cliquez sur le nom de votre distribution dans CloudFront. Cliquez sur Origines, sélectionnez votre origine et cliquez sur Modifier. Assurez-vous que la stratégie de protocole Origin correspond à Match Viewer. Retourner. Cliquez sur Comportements, sélectionnez votre origine et cliquez sur Modifier. Changez Forward Headers en Whitelist et ajoutez Host. Sauvegarder.

Note:J'ai aussi écrit un guide plus long .

15
Adam Link

Les plus votés ne fonctionnent pas pour moi .. la directive <If> ne fonctionne qu'avec Apache 2.4+, mais ElasticBeanstalk a la version 2.2.x.

Donc, en suivant les mêmes conseils que ci-dessus. Créez un fichier appelé .ebextensions/https_rewrite.config avec le contenu suivant

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            LoadModule rewrite_module modules/mod_rewrite.so
            RewriteEngine On
            # This will enable the Rewrite capabilities
            RewriteCond %{HTTPS} !=on
            # This checks to make sure the connection is not already HTTPS
            RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Cela semble fonctionner pour moi.

Sur la façon de créer ce fichier dans votre fichier WAR, consultez cette answer

6
Marc

J'essaie de rediriger un haricot élastique avec loadbalancer en 2018. Aucune des réponses ci-dessus ne fonctionne dans mon environnement. Plusieurs problèmes que j'ai rencontrés:

  1. J'essayais la réponse la plus votée, mais mon Tomcat est la version 2.7. Il ne supporte pas.

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

Donc finalement, je l'ai fait 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 c'est 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 aidera.

4
sliks

Edit: La solution Zags est plus générale et correcte. Je le recommande sur le mien (qui est spécifique à un env en python)

Voici une solution propre et rapide qui évite le piratage de wsgi.conf ou l’utilisation de CloudFront.

Dans votre .ebextensions/some_file.config:

# Redirect HTTP to HTTPS
  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      <Directory /opt/python/current/app/>
      RewriteEngine on
      RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
      RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
      </Directory>

J'ai l'impression que c'est trop facile, mais semble bien fonctionner.

Notez également que je redirige explicitement HTTP au lieu de "pas HTTPS".

4
Ian

Aucune des réponses ci-dessus n'a fonctionné pour moi, mais certaines m'ont aidé à trouver la réponse qui a fonctionné pour moi J'ai également trouvé l'URL ci-dessous qui a aidé http://docs.aws.Amazon.com/elasticbeanstalk /latest/dg/Java-Tomcat-platform.html

J'ai créé la structure de fichier mentionnée dans l'URL ci-dessus pour modifier 2 fichiers Httpd.conf 00_application.conf

copiez l'intégralité du fichier httpd.conf à partir de votre instance et placez-le dans votre code sous .ebextention, dans la structure de dossiers mentionnée dans le lien ci-dessus. Ensuite, ajoutez simplement la ligne ci-dessous à ce fichier dans votre projet.

LoadModule rewrite_module modules/mod_rewrite.so

Faites la même chose pour 00_application.conf, copiez-le à partir de votre instance et placez-le dans votre base de code sous .ebextention sous httpd/conf.d/elasticbeanstalk/00_application.conf Modifiez maintenant ce fichier et ajoutez-le entre VirtualHost

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Maintenant, déployez votre code Cela devrait fonctionner.

3
A Paul

C'est un travail pour moi avec la prochaine commande:

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

et sans la vérification https:

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

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

3
Roy Shmuli

J'ai eu du mal à comprendre cela, alors après avoir trouvé une solution, j'ai écrit une explication détaillée de ma solution pour aider, j'espère, quelqu'un d'autre. Ceci est spécifique à Tomcat 8, Apache2 et Spring Boot. Il existe des exemples vraiment utiles de ebextension dans le github des laboratoires AWS.

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

  1. Créez un fichier dans /src/main/webapp/.ebextensions/httpd/conf.d/elasticbeanstalk.conf
  2. Ajoutez des conditions/règles de réécriture en prenant soin d’inclure "LoadModule modules rewrite_module/mod_rewrite.so"
  3. Déployer vers AWS EBS

Voici une application example Spring Boot .

2
yerself

Sur une beanstalk élastique, vous pouvez simplement ajouter votre configuration on afin que AWS écrase leur configuration, cela vous permettra d'écraser la configuration du serveur Web et de soumettre votre propre configuration.

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

'.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, créez-le simplement.

2
Adi

J'ai les configurations suivantes pour une haricot élastique (64 bits 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.

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

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

Cette solution est plus logique pour moi, mais cela ne fonctionne pas non plus. 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 consistait à 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éé sous le répertoire "conf.d" mais la redirection de http vers 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 ceci est une solution temporaire et si une machine est remplacée, ma redirection https a disparu. 

1
aelve

AWS n'accepte pas les unserscores (_) dans les en-têtes, alors que nous pouvons utiliser (-), donc supprime les caractères de soulignement des variables d'en-tête, exemple: - header_var_val = "une valeur" le remplace par headervarval = "une valeur ". Ça marche pour moi.

0
Rishabh Jhalani

J'avais besoin d'appliquer HTTPS uniquement pour notre environnement de production, et non pour ceux de développement et de transfert qui sont également sur Elastic Beanstalk mais n'utilisent pas d'équilibreur de charge (et ne peuvent donc pas être affectés directement à un certificat). 

J'utilise une variable d'environnement USE_HTTPS. Nous copions le fichier ssl_rewrite.conf si et seulement si USE_HTTPS est défini 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 la modification soit prise en compte. Vous pouvez également supprimer les commandes echo du fichier https.config si vous le souhaitez. 

0
nbeuchat

Juste au cas où quelqu'un aurait encore du mal:

Je lutte depuis un certain temps et j'ai finalement 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 consulter le lien ci-dessous).

Apache 2.2

  1. Créez un fichier dans le répertoire racine de votre application: YOUR_PROJECT_ROOT/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (Si IntelliJ/Java est utilisé, assurez-vous de l'ajouter à la artefact final .WAR)

  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 référentiel GitHub:

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

En outre, il existe de nombreuses autres configurations et exemples utiles.

Cordialement

0
Joao Gavazzi

Nous l'avons résolu sur notre serveur en manipulant X-Forwarded-Proto correctement. 

Ceci est notre configuration Grails mais cela vous aidera avec l’idée:

    grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
    grails.plugin.springsecurity.portMapper.httpPort = 80
    grails.plugin.springsecurity.portMapper.httpsPort = 443
    grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
    grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'
    grails.plugin.springsecurity.secureChannel.definition = [
        [pattern: '/**', access: 'REQUIRES_SECURE_CHANNEL']
    ]
0
Amio.io

Pourquoi ne mettez-vous pas simplement 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 .Zip, il sera automatiquement déployé à nouveau sur toutes les instances.

Utilisez simplement .htaccess:

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

Veuillez noter que la réponse la plus votée est un peu ancienne maintenant ... La réponse de A Paul est en fait la bonne réponse. Le lien fourni dans sa réponse est AWS (il est donc recommandé de remplacer votre configuration Apache pour effectuer la redirection de HTTP vers HTTPS lors de l'exécution de votre application sur Elastic Beanstalk).

Il y a une chose très importante à noter. Si vous déployez plus d'une application Web, l'ajout du dossier .ebextensions à l'intérieur de l'une de vos applications Web ne fonctionnera pas. Vous remarquerez que Aucune des configurations spécifiées n'est en cours d'écriture ou de création. Si vous déployez plusieurs applications Web sur un environnement Elastic Beanstalk, vous devrez lire cet article de AWS Java Tomcat Déployer plusieurs fichiers WAR sur Elastic Beanstalk

En règle générale, vous devez disposer de la structure suivante avant d'émettre la commande eb afin de déployer les fichiers WAR:

MyApplication.Zip
├── .ebextensions
├── foo.war
├── bar.war
└── ROOT.war

si le dossier .ebextentions existe dans chaque fichier WAR, vous remarquerez qu'il est complètement ignoré et qu'aucune modification de configuration ne sera effectuée.

J'espère que ceci aide quelqu'un d'autre.

0
moto kazi

Avec les nouveaux équilibreurs d'applications, vous pouvez le faire de manière relativement simple maintenant ...

Assurez-vous d’en configurer l’un au moment de l’installation d’un environnement EB (toujours par défaut, l’équilibreur de charge classique, je crois). Vous ne pouvez pas changer le type une fois l'environnement créé, recréez-le

Ceci fait, allez dans les paramètres EC2 -> Equilibreurs de charge. Cliquez sur l'équilibreur de charge que vous avez créé pour votre environnement EB. Vous devez vous assurer que vous avez configuré un écouteur HTTPS avant cette tâche. Veillez donc à écouter sur HTTPS 443 avec un certificat SSL et à transférer le trafic sur vos instances avec HTTP sur 80.

Ajoutez ensuite un nouvel écouteur qui écoute sur HTTP et ajoutez une action par défaut de "Rediriger vers:". Assurez-vous de définir HTTPS comme protocole, 443 comme port, "Hôte d'origine, chemin, requête" comme option et enfin 301 comme code de réponse HTTP.

Une fois cet écouteur ajouté, assurez-vous de mettre à jour votre groupe de sécurité EC2 Load Balancer pour accepter les connexions HTTPS et HTTP. Vous verrez un petit panneau d'avertissement sur l'écouteur pour vous le rappeler!

Chris

0
Kristian

Pour prolonger deux autres réponses à cette question https://stackoverflow.com/a/43026082/8775205 , https://stackoverflow.com/a/42035023/8775205 . Pour botte à ressort les utilisateurs qui déploient leurs services sur AWS avec ELB et qui ont besoin d’un guide étape par étape, vous pouvez ajouter un fichier ****. conf sous src/main/webapp/.ebextensions/httpd/conf.d/dans votre projet.

src
--main
----Java
----resources
----webapps
------.ebextensions
--------httpd
----------confd
------------****.conf

****. conf ressemble à ce qui suit. J'ai remarqué que mon site de test ne comportait qu'une seule instance et j'ai donc ajouté une condition pour l'exclure. 

<VirtualHost *:80>
   LoadModule rewrite_module modules/mod_rewrite.so

   RewriteEngine On
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker 
   RewriteCond %{HTTP_Host} !testexample.com #excludes test site
   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>

Après cela, pensez à ajouter une "ressource" sous maven-war-plugin dans votre pom.xml afin de récupérer la configuration ci-dessus.

<plugin>
     <groupId>org.Apache.maven.plugins</groupId>  
     <artifactId>maven-war-plugin</artifactId>  
     <configuration>  
         <webResources>
             <resource>  
               <!-- some other resource configured by yourself-->
             </resource> 
             <resource>
                <directory>src/main/webapps/.ebextensions</directory>
                 <targetPath>.ebextensions</targetPath>
                 <filtering>true</filtering>
             </resource> 
         </webResources>  
     </configuration>  
     <version>2.1.1</version>
 </plugin>

Enfin, validez et poussez votre code, attendez AWS codebuild et codepipeline pour récupérer votre code dans votre référentiel et le déployer dans un environnement beanstalk, ou simplement décompresser votre projet dans un fichier war et le télécharger sur votre environnement AWS beanstalk.

0
Tang Mao