Làm thế nào để hạn chế quyền truy cập vào thư mục và thư mục con


42

Tôi cần hạn chế quyền truy cập vào bất kỳ tệp hoặc thư mục con nào trong "testdir" trực tiếp. Tâm sự của tôi

...
location ~* ^.+\.(jpg|txt)$ {
            root   /var/www/site;
        }
location /testdir {
        deny all;
        return 404;
        }
...

Trong cấu hình của tôi, tôi không có giới hạn đối với / testdir / jpg_or_txt-files. Làm thế nào để làm nó?


Lưu ý, theo kinh nghiệm của tôi, chức năng định vị chỉ hoạt động đúng khi chạy nginx trên linux. Khi chạy trên windows, chúng tôi gặp sự cố với việc này không hoạt động ...
samsmith 7/1/2015

Câu trả lời:


43

để hạn chế quyền truy cập vào nhiều thư mục trong nginx trong một mục nhập vị trí

...
location ~ /(dir1|dir2|dir3) {
   deny all;
   return 404;
}
...

7
Bạn nên trả lại 403 chứ không phải 404.
Stillmatic1985

12
Điều này không trả lời câu hỏi nào cả.

1
trả về 403 cho một gợi ý rằng thư mục tồn tại, 404 không đưa ra bằng chứng nào về thư mục tồn tại cả
Don Wilson

23

Đó là bởi vì lệnh "gốc" khớp với lệnh trước "từ chối" có thể được khớp. Đảo ngược thứ tự các chỉ thị của bạn và nó sẽ hoạt động:

...
location /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}
...

16

Để đảm bảo rằng kết quả khớp testdir được chọn thay vì khớp jpg / txt, hãy sử dụng các vị trí sau:

location ^~ /testdir {
  deny all;
  return 404;
}
location ~* ^.+\.(jpg|txt)$ {
  root   /var/www/site;
}

Trong ví dụ của bạn, bạn có hai loại vị trí. location /testdirlà một vị trí tiền tố, vì nó không có dấu ngã ( ~) giữa location/testdir.

location ~* ^.+\.(jpg|txt)$là một vị trí regex (một trường hợp không nhạy cảm, do *trực tiếp sau dấu ngã). Từ tài liệu nginx :

Để tìm vị trí khớp với một yêu cầu đã cho, trước tiên nginx kiểm tra các vị trí được xác định bằng chuỗi tiền tố (vị trí tiền tố). Trong số đó, vị trí có tiền tố phù hợp dài nhất được chọn và ghi nhớ. Sau đó, các biểu thức chính quy được kiểm tra, theo thứ tự xuất hiện của chúng trong tệp cấu hình. Việc tìm kiếm các biểu thức chính quy chấm dứt trên kết quả khớp đầu tiên và cấu hình tương ứng được sử dụng. Nếu không tìm thấy kết quả khớp với biểu thức chính quy thì cấu hình của vị trí tiền tố được nhớ trước đó sẽ được sử dụng.

Vấn đề ở đây là vị trí testdir của bạn đang được ghi nhớ, nhưng sau đó vị trí jpg / txt được chọn trong giai đoạn regex, vì nó phù hợp. Lưu ý sau đây từ tài liệu này là những gì tôi dựa trên giải pháp của mình (được nêu ở trên) dựa trên:

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.


11
location /foo {
    deny all;
    return 404;
}

Điều này sẽ cung cấp cho bạn 403 mọi lúc vì từ chối tất cả ... Khi bạn muốn máy chủ cung cấp cho bạn 404 chỉ cần trả về 404 ... như vậy:

location /foo {
    return 404;
}
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.