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 DocumentRoot
trong 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 stat
cuộc gọi hệ thống theo yêu cầu.
Với mod_proxy, bạn có thể sử dụng ProxyPassMatch
nế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ó ProxyPass
sẵ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!