Bagaimana mencegah nginx dari membalikkan subdirektori khusus proxy

11

Di Apache Anda dapat ProxyPass semuanya kecuali satu atau lebih subdirektori (dengan "!").

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

Apa yang dimaksud dengan Nginx?

Tebakan pertama saya jelas tidak berfungsi:

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

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

Jawaban:

11

Anda dapat mengikat proxy_pass untuk PERSIS jalur yang Anda suka, seperti ini

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

Ini memastikan bahwa tidak ada jalan lain yang akan dilewati tetapi /

ATAU

Anda dapat menggunakan sintaks ini hanya untuk subdirektori yang cocok

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

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

The ^~cocok subdir dan kemudian berhenti searching sehingga /tidak akan dieksekusi. Dijelaskan di sini .

Christopher Perrin
sumber
root / var / www / situs / subdir harus root / var / www / situs dalam kasus saya, jika tidak nginx akan mencoba mengakses / var / www / situs / subdir / subdir.
Tinus
Kamu benar. Entah itu, atau Anda dapat menggunakan aliassebagai gantinyaroot
Christopher Perrin
1
Bisakah Anda menjelaskan ini ^~lebih lanjut? Saya tidak bisa mendapatkan apa fungsinya. Saya mencoba membaca tautan yang Anda kirim, tetapi masih belum bisa mendapatkannya. Jika lokasi awalan pencocokan terpanjang memiliki pengubah "^ ~" maka ekspresi reguler tidak dicentang.
Mohammed Noureldin
@MohammedNoureldin pada dasarnya berarti mencoba mencocokkan awalan di jalur dan tidak mengevaluasi ekspresi reguler.
Christopher Perrin
1
@MohammedNoureldin ini adalah bagian pertama dari jalur yang ingin Anda gunakan untuk lokasi. Dan ya itu tanpa regex.
Christopher Perrin