2016-04-08 18 views
6

Ich habe folgendes http config:Nginx: alle Umleiten aber ein

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; 
} 

Ich würde gerne http://example.com/.well-known/acme-challenge/filename/home/vagrant/.well-known/acme-challenge/filename dienen, während alle anderen HTTP-Anforderung sollte auf https umgeleitet werden.

Ich dachte, Nginx würde Regeln in ihrer Reihenfolge verarbeiten, wenn Übereinstimmungen es verwendet, sonst geht es weiter. Aber anscheinend nicht. Wie kann ich erreichen, was ich will?

+1

Sollte die 'root/home/Vagabund nicht sein;'? – equaeghe

Antwort

10

sollen Sie diese Umleitung bewegen sich in dem „/“ Block zu sein:

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

Sie Prozess, um zu tun, aber Sie ist außerhalb von jedem Standort aus Block, Vorrang nehmen so wahrscheinlich.

1

Nach Nginx, Put root xxx in einem Standort Block ist ein pitfall.

Nach einigem Kampf, hier ist mein Arbeits config:

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

Das ist die Konfiguration, die auch für mich funktionierte. Habe versucht herauszufinden, wie man die challenge-challenge-Challenge abschließen kann, aber alles andere auf https auf ngins umleiten. – Joey

+1

Begründung für den Downvote: Die Falle besteht darin, für jeden Block dieselbe Wurzel zu wiederholen. Für diese Frage ist es völlig angemessen (und elegant!), Eine Wurzel in einen Standortblock zu setzen. Ihre Lösung macht die Dinge unnötig kompliziert. – equaeghe

Verwandte Themen