2016-05-27 7 views
3

Meine Nodejs App wird auf AWS EB bereitgestellt. Ich habe den https Server bereits konfiguriert und es funktioniert gut. Jetzt muss ich jede Nicht-https-Anfrage an https mit dem www umleiten. als Präfix, wie folgt aus:AWS EB - Umleiten aller Zugriffe auf https

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

Ich bin mit nginx und meine EB-Instanz eine Instanz ohne Load Balancer vor ihm ist.

ich eine Konfigurationsdatei im .ebextensions Ordner mit diesem 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/*' 

erstellt haben, ich bin sicher, aws Konto meine Config nimmt, weil de ssl fein arbeitet. Aber der HTTP-Block funktioniert nicht. Es gibt keine Weiterleitung.

Vielleicht ist mein Problem über das Umschreiben der ursprünglichen nginx Config von EB, wissen Sie, wie dies zu erreichen?

Können Sie mir bitte dabei helfen? Ich habe eine Menge Dinge ausprobiert ..

Danke

+0

Mögliche Duplikat [Wie https auf elastischen Bohnenstengel zu zwingen?] (Http://stackoverflow.com/questions/14693852/how-to-force-https-on-elastic-beanstalk) –

+0

vergessen zu sagen, dass ich Nginx und eb auf einer einzigen Instanz ohne Load Balancer davor verwenden! –

+0

Haben Sie nach etwas wie "Nginx force SSL" gesucht? Auf diese Frage gibt es schon viele Antworten. –

Antwort

4

OK, um das Problem zu finden, erstellt EB eine Standard-Konfigurationsdatei /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf, die 8080 zu hören ist also Ihre Wieder direkt nicht zu werden aufgenommen wird wie Nginx die früher definierte Regel für 8080 verwendet.

Hier ist eine Config-Datei, die ich verwende, die funktioniert. Die erzeugte Datei wird der Standardregel vorangestellt.

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

+0

Danke Jozzhart, werde es so schnell wie möglich versuchen :) –

Verwandte Themen