2012-06-20 21 views
11

Tôi muốn tẩy các phần tử của véc ni bằng cách sử dụng HTTP. Cuộc gọi http này được kích hoạt từ máy chủ phụ trợ phía sau chính véc ni, do đó máy chủ phụ trợ không có quyền truy cập khác nhưng HTTP.Varnish purge bằng cách sử dụng HTTP và REGEX

tôi đã thực hiện các quy tắc tẩy sau đây với ACL theo đó hoạt động tốt cho

curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg 

nhưng tôi muốn để có thể thanh lọc URL thông qua HTTP sử dụng Regex

curl -X PURGE http://www.example.com/image/123/*.jpg 

Bằng cách đó tôi muốn xóa tất cả phiên bản được chia tỷ lệ của hình ảnh này khi một hình ảnh mới đã được tải lên. Là có một cách?

Trả lời

9

thử điều này:

nếu véc ni 3.0 trở lên.

vcl_recv { 
    if (req.request == "PURGE") { 
      if (!client.ip ~purge){ 
        error 405 "Not allowed"; 
      } 
    ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url); 
    error 200 "Ban added"; 

    } 
0

Chắc chắn có.

Trong VCL, bạn muốn sử dụng phương thức cấm - được ghi lại trong "man vcl". Nó tạo ra một bộ lọc trên các yêu cầu gửi đến. Nếu bạn đang sử dụng điều này với tốc độ hơn 2 lần mỗi giây, tôi khuyên bạn nên google "cấm luker thân thiện" và viết lại các biểu thức cho phù hợp.

đang chưa được kiểm tra:

sub vcl_recv { 
     if (req.method == "PURGERE" and client.ip ~ admin_network) { 
      ban("req.http.host == " + req.http.host + " && req.url == " + req.url); 
     } 
0
acl purge { 
"127.0.0.1"; 
} 

sub vcl_recv { 
    if (req.request == "PURGE") { 
     if (!client.ip ~ purge) { 
      error 405 "IP:" + client.ip + " Not allowed."; 
     } 
     ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url); 
     error 200 "host:" + req.http.host + " url:" + req.url + " Ban added"; 
    } 
} 
4

Thứ nhất xác định một danh sách trắng của những người có thể sử dụng các cuộc thanh trừng, sau đó thêm đoạn thơ purger trong VCL của bạn.

acl purge { 
"127.0.0.1"; 
"10.22.0.0"/16; 
} 


sub vcl_recv { 


if (req.http.X-Purge-Regex) { 
     if (!client.ip ~ purge) { 
      error 405 "Varnish says nope, not allowed."; 
     } 
     ban_url(req.http.X-Purge-Regex); 
     error 200 "The URL has been Banned."; 
} 

Véc ni sẽ sử dụng giá trị của tiêu đề X-Purge-Regex để tạo lệnh cấm.

Vì vậy, sau đó bạn có thể cấm những thứ như thế này:

curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081 

hoặc

curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081 

varnishserver là địa chỉ của máy chủ véc ni của bạn.

+0

Mọi trợ giúp ở đây? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –

Các vấn đề liên quan