Tương đương với try_files của Nginx là gì?


12

Trong Nginx có try_filesmột lệnh cấu hình "kiểm tra sự tồn tại của các tệp theo thứ tự và trả về tệp đầu tiên được tìm thấy". Tôi thấy nó rất gọn gàng để làm điều này

location ~* \.(gif|jpe?g|css|js)$ {
    try_files $uri 404;
}

đó là một cách an toàn để phục vụ trực tiếp các tệp tĩnh mà không làm phiền các khung web. Làm thế nào tôi có thể làm điều tương tự trong Apache?


1
Giải pháp bạn đã đi là gì? Câu trả lời được chọn không thực sự đáp ứng trường hợp sử dụng của tôi.
panepeter

Câu trả lời:


9

Tôi thường thấy điều này được thực hiện với mod_rewrite:

 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
 RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]

Nó có nghĩa là "Nếu một tệp không tồn tại trên hệ thống tệp, thì hãy ủy quyền nó thông qua cụm mod_proxy_balancer của tôi." Mặt khác, nếu tệp tồn tại trên hệ thống tệp, nó được Apache cung cấp đơn giản so với định nghĩa DocumentRoottrong virtualhost của bạn.

Nhưng đó không phải là cách yêu thích của tôi, chủ yếu là vì nó sẽ yêu cầu một statcuộc gọi hệ thống theo yêu cầu.

Với mod_proxy, bạn có thể sử dụng ProxyPassMatchnếu bạn có phiên bản đủ mới của Apache ( xem tài liệu ). Nhu la:

ProxyPassMatch \.(gif|jpe?g|css|js)$ !

Mà sử dụng! để chỉ ra Apache không nên yêu cầu proxy phù hợp với biểu thức chính quy đó.

Nếu bạn đang sử dụng phiên bản cũ hơn của Apache, bạn sẽ có ProxyPasssẵn lệnh cho bạn, nhưng nó chỉ phù hợp với tiền tố URI (đây là phương thức ưa thích hiện tại của tôi):

ProxyPass /images !
ProxyPass /stylesheets !

Tất nhiên, nếu bạn phải thực hiện khớp biểu thức chính quy như bạn đã đề cập ở trên, thì bạn có thể chỉ cần sửa đổi quy tắc mod_rewrite mà tôi đã đăng ở trên cùng để phủ định kết quả khớp với %{REQUEST_URI}.

Mong rằng sẽ giúp!


2
Tôi nghĩ rằng cách "xấu" tương tự như vậy try_files, bởi vì nó kiểm tra sự tồn tại của tệp. Dường như không có cách nào để làm điều đó ProxyPass.
phunehehe
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.