2016-07-17 15 views
0

Ich betreibe eine Knoten/Express-App auf einer Amazon ec2-Instanz, kein Load-Balancer, kostenlose Tier. Ich versuche, alles auf HTTPS umzuleiten. Alles, was ich bisher gemacht habe, war über die EB CLI (eb deploy, eb ssh und so weiter).Umleitung von amazon ec2 nodejs-Instanz zu HTTPS

Ich habe ein kostenloses Zertifikat von Letsencrypt (CertBot) und ich habe die nginx.conf wie in dieser tutorial erläutert eingerichtet. Ich kann auf die HTTP- und HTTPS-Versionen der App-URL zugreifen. Das http ruft meine Nodejs-App ab, aber https gibt die Standard-Nginx-HTML-Seite zurück (aus/usr/share/nginx/html).

Ich möchte meine Nodejs-App nur über HTTPS abrufen und alle HTTP-Anfragen an HTTPS umleiten.

Mein nginx.conf ist wie folgt:

# Elastic Beanstalk managed configuration file 
# Some configuration of nginx can be by placing files in /etc/nginx/conf.d 
# using Configuration Files. 
# http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html 
# 
# Modifications of nginx.conf can be performed using container_commands to modify the staged version 
# located in /tmp/deployment/config/etc#nginx#nginx.conf 

# Elastic_Beanstalk 
# For more information on configuration, see: 
# * Official English Documentation: http://nginx.org/en/docs/ 
# * Official Russian Documentation: http://nginx.org/ru/docs/ 

user nginx; 
worker_processes auto; 

error_log /var/log/nginx/error.log; 

pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 

http { 

    port_in_redirect off; 
    include  /etc/nginx/mime.types; 

    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 

    keepalive_timeout 65; 
# Elastic Beanstalk Modification(EB_INCLUDE) 

    log_format healthd '$msec"$uri"' 
         '$status"$request_time"$upstream_response_time"' 
         '$http_x_forwarded_for'; 
    server { 
    listen 80; 
    server_name localhost; 
    location/{ 
     # Redirect any http requests to https 
     if ($http_x_forwarded_proto != 'https') { 
     rewrite^https://$host$request_uri? permanent; 
     } 
    } 
    } 

    server { 
     listen  443 ssl; 
     listen  [::]:443 ssl; 
     server_name localhost; 

     ssl_certificate "/etc/letsencrypt/live/domain/fullchain.pem"; 
     ssl_certificate_key "/etc/letsencrypt/live/domain/privkey.pem"; 
     # It is *strongly* recommended to generate unique DH parameters 
     # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048 
     #ssl_dhparam "/etc/pki/nginx/dhparams.pem"; 
     ssl_session_cache shared:SSL:1m; 
     ssl_session_timeout 10m; 
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP; 
     ssl_prefer_server_ciphers on; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     error_page 404 /404.html; 
      location = /40x.html { 
     } 

     error_page 500 502 503 504 /50x.html; 
      location = /50x.html { 
     } 
    } 


include /etc/nginx/conf.d/*.conf; 
# End Modification 

} 

Antwort

0

Ports To-Route wieder, können Sie iptables hinzufügen in Ihrem EC2-Instanz Routing, zum Beispiel:

sudo iptables -t nat - Ein PREROUTING -p tcp --dport 80 -j REDIRECT --to-Ports 443

* Vergewissern Sie sich, dass in EC2 Security Group, die eingehende HTTP-Port 80 source = "überall".

Um die iptables Routing-Einträge anzuzeigen, führen:

sudo iptables -t nat -L

Wenn Sie Routing-Eintrag (erste Zeile) entfernen müssen, führen:

sudo iptables -t nat -D PREROUTING 1