Làm cách nào để ngăn nginx khỏi thư mục con proxy cụ thể đảo ngược


11

Trên Apache, bạn có thể ProxyPass mọi thứ trừ một hoặc nhiều thư mục con (với "!").

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

Nginx tương đương là gì?

Dự đoán đầu tiên của tôi rõ ràng là không hoạt động:

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

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

Câu trả lời:


11

Bạn có thể liên kết proxy_pass để CHÍNH XÁC con đường bạn thích, như thế này

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

Điều này đảm bảo rằng không có con đường nào khác sẽ được thông qua nhưng /

HOẶC LÀ

bạn có thể sử dụng cú pháp này để chỉ các thư mục con được khớp

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

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

Các ^~phù hợp với subdir và sau đó ngừng tìm kiếm vì thế /sẽ không được thực thi. Nó được mô tả ở đây .


root / var / www / site / subir nên là root / var / www / site trong trường hợp của tôi, nếu không nginx sẽ cố gắng truy cập / var / www / site / subir / subir.
Tinus

Bạn đúng rồi. Hoặc, hoặc bạn có thể sử dụng aliasthay vìroot
Christopher Perrin

1
Bạn có thể giải thích điều này ^~nhiều hơn? Tôi không thể làm những gì nó làm. Tôi đã thử đọc liên kết bạn đã gửi, nhưng vẫn không thể nhận được. Nếu vị trí tiền tố phù hợp dài nhất có bộ sửa đổi ^ ^ ~ thì các biểu thức thông thường không được kiểm tra.
Mohammed Noureldin

@MohammedNoureldin về cơ bản có nghĩa là nó cố gắng khớp một tiền tố trên một đường dẫn và không đánh giá các biểu thức thông thường.
Christopher Perrin

1
@MohammedNoureldin nó là phần đầu tiên của con đường mà bạn muốn sử dụng cho vị trí. Và vâng, nó không có regex.
Christopher Perrin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.