2016-05-27 1 views
3

Mon application nodejs est déployée sur AWS EB. J'ai déjà configuré le serveur https et ça marche bien. Maintenant, je dois rediriger toutes les demandes non-https à https avec le www. comme préfixe, comme ceci:AWS EB - Redirige tout le trafic vers https

GET example.com => https://www.example.com

J'utilise nginx et mon exemple EB est une instance unique sans équilibreur de charge devant elle.

J'ai créé un fichier de configuration dans le dossier .ebextensions avec ce code

 
Resources: 
    sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress 
    Properties: 
     GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} 
     IpProtocol: tcp 
     ToPort: 443 
     FromPort: 443 
     CidrIp: 0.0.0.0/0 

files: 
    /etc/nginx/conf.d/999_nginx.conf: 
    mode: "000644" 
    owner: root 
    group: root 
    content: | 

     upstream nodejsserver { 
     server 127.0.0.1:8081; 
     keepalive 256; 
     } 

     # HTTP server 

     server { 
     listen  8080; 
     server_name localhost; 
     return  301 https://$host$request_uri; 
     } 

     # HTTPS server 

     server { 
     listen  443; 
     server_name localhost; 

     ssl     on; 
     ssl_certificate  /etc/pki/tls/certs/server.crt; 
     ssl_certificate_key /etc/pki/tls/certs/server.key; 

     ssl_session_timeout 5m; 

     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; 
     ssl_prefer_server_ciphers on; 

     location/{ 
      proxy_pass http://nodejsserver; 
      proxy_set_header Connection ""; 
      proxy_http_version 1.1; 
      proxy_set_header  Host    $host; 
      proxy_set_header  X-Real-IP   $remote_addr; 
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; 
      proxy_set_header  X-Forwarded-Proto https; 
     } 
     } 

    /etc/pki/tls/certs/server.crt: 
    mode: "000400" 
    owner: root 
    group: root 
    content: | 
     -----BEGIN CERTIFICATE----- 
     my crt 
     -----END CERTIFICATE----- 

    /etc/pki/tls/certs/server.key: 
    mode: "000400" 
    owner: root 
    group: root 
    content: | 
     -----BEGIN RSA PRIVATE KEY----- 
     my key 
     -----END RSA PRIVATE KEY----- 

    /etc/nginx/conf.d/gzip.conf: 
    content: | 
     gzip on; 
     gzip_comp_level 9; 
     gzip_http_version 1.0; 
     gzip_types text/plain text/css image/png image/gif image/jpeg application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml; 
     gzip_proxied any; 
     gzip_disable "msie6"; 

commands: 
    00_enable_site: 
    command: 'rm -f /etc/nginx/sites-enabled/*' 

Je suis sûr que aws prend en compte ma config car de ssl fonctionne bien. Mais le bloc http ne fonctionne pas .. Il n'y a pas de redirection.

Peut-être que mon problème est sur la réécriture de la configuration nginx originale de EB, savez-vous comment y parvenir?

Pouvez-vous m'aider s'il vous plaît? J'ai essayé beaucoup de choses ..

Merci

+0

double possible de [Comment forcer https sur beanstalk élastique?] (Http://stackoverflow.com/questions/14693852/how-to-force-https-on-elastic-beanstalk) –

+0

Mot pour dire que j'utilise nginx et eb sur une seule instance sans équilibreur de charge devant lui! –

+0

Avez-vous cherché quelque chose comme "Nginx force SSL"? Il y a déjà des tonnes de réponses à cette question. –

Répondre

4

OK, a trouvé la question, EB crée un fichier de configuration par défaut /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf qui écoute 8080. Ainsi, votre interrogatoire supplémentaire n'est pas ramassé comme Nginx utilise la règle précédemment définie pour 8080.

Voici un fichier de configuration que j'utilise qui fonctionne. Le fichier qu'il génère précédera la règle par défaut.

https://github.com/jozzhart/beanstalk-single-forced-ssl-nodejs-pm2/blob/master/.ebextensions/https-redirect.config

+0

Merci Jozzhart, va essayer ça dès que possible :) –