2016-04-08 16 views
6

Ho la seguente http config:Nginx: Redirect tutti tranne uno

server { 
    listen    80; 
    server_name   example.com; 

    # Necessary for Let's Encrypt Domain Name ownership validation 
    location /.well-known/acme-challenge/ { 
    root /home/vagrant/.well-known/acme-challenge/; 
    } 

    return 301 https://$host$request_uri; 
} 

Vorrei http://example.com/.well-known/acme-challenge/filename servire /home/vagrant/.well-known/acme-challenge/filename mentre ogni altra richiesta http dovrebbe essere reindirizzato a https.

Pensavo che Nginx avrebbe elaborato le regole nel loro ordine, se le corrispondenze lo utilizza, altrimenti continua. Ma apparentemente no. Come posso ottenere ciò che voglio?

+1

Non dovrebbe essere 'root/home/vagabondo;'? – equaeghe

risposta

10

si dovrebbe spostare che reindirizzano ad essere nel blocco "/":

location/{ 
    return 301 https://$host$request_uri; 
} 

Fanno processo in ordine, ma la tua è al di fuori di qualsiasi blocco posizione, quindi probabilmente sta prendendo la precedenza.

1

Secondo nginx, il numero root xxx in un blocco di posizione è un pitfall.

Dopo una lotta, ecco il mio config di lavoro:

server { 
    listen    80; 
    server_name   example.com; 
    root /vagrant/www/current/public; 

    # Necessary for Let's Encrypt Domain Name ownership validation 
    location /.well-known/acme-challenge/ { 
    try_files $uri /dev/null =404; 
    } 
    location/{ 
    return 301 https://$host$request_uri; 
    } 
} 
+0

Questa è la configurazione che ha funzionato anche per me. Abbiamo cercato di capire come completare la let encrypt challenge, ma continuiamo a reindirizzare tutto il resto a https su ngins. – Joey

+1

Giustificazione per downvote: il trabocchetto è ripetere la stessa radice per ogni blocco. Per questa domanda, è del tutto appropriato (ed elegante!) Mettere una radice in un blocco di posizione. La tua soluzione sta rendendo le cose inutilmente complesse. – equaeghe

Problemi correlati