Điểm:2

NGINX chuyển hướng đến tệp được lưu trong bộ nhớ cache trong thư mục con

lá cờ ke

Tôi có một chương trình tạo các phiên bản ảnh được tối ưu hóa để tải lên /hình ảnh/ thư mục trên máy chủ web. Nó đi qua các thư mục con và trong mỗi thư mục, tạo ra một .optimized thư mục chứa phiên bản được tối ưu hóa, nếu nó ít nhất là một kích thước nhất định nhỏ hơn so với bản gốc. Mục tiêu của tôi là kiểm tra xem có tồn tại một phiên bản được tối ưu hóa như vậy hay không, phân phát phiên bản đó nếu có và phân phát bản gốc nếu không (theo một nghĩa nào đó như cách gzip_static cung cấp phiên bản .gz của tệp nếu nó tồn tại).

Tôi đang chạy NGINX dưới dạng proxy trước Apache, vì vậy mặc dù tôi đã quen với việc xử lý các sự cố như thế này bằng cách sử dụng htaccess, nhưng tôi đang cố gắng thực hiện điều đó một cách tự nhiên trong NGINX để tránh việc máy chủ phải chuyển yêu cầu cho Apache. Trong .htaccess, tôi có thể làm một cái gì đó như thế này:

RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [OR]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]

Có cách nào tốt để xử lý việc này trực tiếp trong NGINX không? Hầu hết các trường hợp sử dụng tương tự mà tôi tìm thấy đều giữ tất cả các tệp được lưu trong bộ nhớ cache/được tối ưu hóa trong một thư mục được lưu trong bộ nhớ cache duy nhất, trái ngược với cấu trúc mà tôi đang mô tả.

djdomi avatar
lá cờ za
`if ($request_filename ~ "^/(.*/)+(.*?)$"){ đặt $rule_0 1; } nếu (-f /${fref_0_0}/.optimized/${fref_0_1}){ đặt $rule_0 1; } nếu ($rule_0 = "1"){ viết lại /.* /$1/.optimized/$2 cuối cùng; }` bạn có thể kiểm tra cái này không, nếu tôi đọc đúng yêu cầu của bạn thì nó có thể hoạt động, nếu không chúng ta phải sử dụng các tệp thử
Richard Smith avatar
lá cờ jp
Các tệp nằm bên dưới thư mục `/images/`. URI có bắt đầu bằng `/images/` không?
lá cờ ke
@djdomi Cảm ơn bạn! Tôi sẽ có quyền truy cập vào máy chủ của mình trong chốc lát và sẽ thử.
lá cờ ke
@RichardSmith Vâng. Tôi đã nhầm lẫn khi bỏ nó ra khỏi ví dụ htaccess. Tôi đã sửa nó ngay bây giờ. Cảm ơn!
Điểm:3
lá cờ jp

Bạn có thể sử dụng một biểu hiện thông thường địa điểm để trích xuất phần thứ nhất và thứ hai của URI. Sử dụng một try_files bản tường trình để tìm kiếm hệ thống tệp cho từng tệp theo thứ tự.

Ví dụ:

vị trí ~ ^(/images/.*?)([^/]+)$ {
    try_files $1.optimized/$2 $1$2 =404;
}
lá cờ us
Tôi nghĩ thứ tự nên là `try_files $1.optimized/$2 $1$2 =404` để phiên bản tối ưu hóa được sử dụng nếu có.
Richard Smith avatar
lá cờ jp
Ối. Đã sửa.Cảm ơn @TeroKilkanen
lá cờ ke
Cảm ơn bạn rất nhiều! Đã xảy ra lỗi trong regex của tôi (giả sử sẽ có ít nhất một thư mục con liên quan, không thể giả định được), mặc dù ngay cả khi tôi chuyển sang `^(/images/(?:.*/)?)(. *)$` có vẻ như nó không được "kích hoạt". Tôi đang cố gắng tìm ra lý do tại sao ....
lá cờ ke
Ồ! Tôi nhận ra rằng proxy_pass của tôi đang cản trở việc cung cấp nội dung tĩnh... Tôi sẽ phải giải quyết vấn đề đó, nhưng điều đó ít nhất giải thích tại sao nó không được áp dụng. Cảm ơn một lần nữa!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.