2017-10-06 9 views
0

Je suis aux prises avec NGINX et la configuration de mes v-hosts. J'essaye de mettre en place un vhost qui redirige les requêtes HTTP vers HTTPS puis vers mon application (quand c'est 443)NGINX SSL redirige trop souvent

Mon OS est Ubuntu 16.04 et j'utilise NGINX 1.10.3.

Le nginx.conf ressemble à ce que (la plupart du temps par défaut):

user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 

events { 
    worker_connections 768; 
} 

http { 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 
    server_tokens off; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on; 
    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 
    gzip on; 
    gzip_disable "msie6"; 
    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

Mes ServerBlocks/VHosts ressembler à ça:

server { 
    listen    443 ssl; 
    server_name   xxx.com; 
    # Prevent MITM 
    add_header   Strict-Transport-Security "max-age=31536000"; 
    ssl_certificate  "/etc/nginx/ssl/xxx.com.pem"; 
    ssl_certificate_key "/etc/nginx/ssl/xxx.com.key"; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 
    location/{ 
     proxy_pass  http://localhost:2237; 
    } 
} 
server { 
    listen    80; 
    server_name   xxx.com; 
    return 301   https://$server_name$request_uri; 
} 

le problème est maintenant, que ce soit si je suis en utilisant HTTP ou HTTPS, il essaie de me rediriger vers HTTPS, donc je suis coincé dans une boucle infinie de redirections.

Je n'ai absolument aucune idée d'où est mon erreur.

Chaque VHost est dans un seul fichier. L'application sur le port 2237 est un noeud JS Express Server. J'utilise aussi Cloudflare (j'ai obtenu mon certificat SSL d'eux)

Edit:

sortie de curl -I est:

$ curl -I https://example.com 
HTTP/1.1 301 Moved Permanently 
Date: Fri, 06 Oct 2017 19:42:19 GMT 
Content-Type: text/html 
Connection: keep-alive 
Set-Cookie: __cfduid=d827df762e20a4e321b92b34bd15546621507318939; expires=Sat, 06-Oct-18 19:42:19 GMT; path=/; domain=.example.com; HttpOnly 
Location: https://example.com/ 
Server: cloudflare-nginx 
CF-RAY: 3a9b1a6a4e4564d5-FRA 
+0

Exécutez 'nginx -T' et vérifiez –

+0

@TarunLalwani Non, c'est juste cette configuration – dunklesToast

+0

Essayez d'ajouter 'proxy_redirect http: // localhost: 2237/https: // $ host /;' dans votre bloc 'proxy_pass'. Je pense que votre application nodejs fait une redirection qui pourrait être à l'origine de ces redirections –

Répondre

1

Vous devez utiliser ci-dessous config

server { 
listen    80; 
server_name   example.com; 
add_header   Strict-Transport-Security "max-age=31536000"; 
    location/{ 
    proxy_pass  http://localhost:2237; 
    proxy_redirect http://localhost:2237/ https://$host/; 
    } 
} 

Votre utilisent cloudflare SSL et terminent le SSL sur cloudflare. Vous devriez donc simplement écouter sur le port 80. Votre config précédente redirigeait le port 80 vers HTTPS et envoyait la requête à Cloudflare qui l'envoyait alors à votre port nginx 80 et donc créait une boucle infinie