Come prevenire nginx da sottodirectory specifiche per proxy inverso


11

Su Apache puoi ProxyPass tutto tranne una o più sottodirectory (con "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Qual è l'equivalente di Nginx?

La mia prima ipotesi ovviamente non funziona:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

Risposte:


11

Puoi associare proxy_pass a ESATTAMENTE il percorso che ti piace, in questo modo

location = / {
    proxy_pass http://localhost:9999/;
}

Questo si assicura che nessun altro percorso verrà passato ma /

O

puoi usare questa sintassi solo per le sottodirectory da abbinare

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

L' ^~corrisponde al subdir e poi interrompe la ricerca in modo che il /non verrà eseguita. È descritto qui .


root / var / www / site / subdir dovrebbe essere root / var / www / site nel mio caso, altrimenti nginx proverà ad accedere a / var / www / site / subdir / subdir.
Tinus,

Hai ragione. O quello, o puoi usare aliasinvece diroot
Christopher Perrin il

1
Potresti spiegarlo di ^~più? Non sono riuscito a capire cosa fa. Ho provato a leggere il link che hai inviato, ma ancora non riesco a ottenerlo. Se la posizione del prefisso corrispondente più lunga ha il modificatore “^ ~”, le espressioni regolari non vengono controllate.
Mohammed Noureldin il

@MohammedNoureldin significa essenzialmente che cerca di abbinare un prefisso su un percorso e non valuta le espressioni regolari.
Christopher Perrin,

1
@MohammedNoureldin è la prima parte del percorso che si desidera utilizzare per la posizione. E sì, è senza regex.
Christopher Perrin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.