W Nginx istnieje try_files
dyrektywa config, która „sprawdza, czy pliki istnieją w kolejności i zwraca pierwszy znaleziony plik”. Uważam to za bardzo miłe
location ~* \.(gif|jpe?g|css|js)$ {
try_files $uri 404;
}
który jest bezpiecznym sposobem bezpośredniego udostępniania plików statycznych, bez zawracania sobie głowy stronami internetowymi. Jak mogę zrobić to samo w Apache?
apache-2.2
nginx
phunehehe
źródło
źródło
Odpowiedzi:
Często widzę to zrobione za pomocą mod_rewrite:
Oznacza to: „Jeśli plik nie istnieje w systemie plików, należy go proxy przez mój klaster mod_proxy_balancer”. W przeciwnym razie, jeśli plik istnieje w systemie plików, jest po prostu obsługiwany przez Apache w stosunku do zdefiniowanego
DocumentRoot
w twoim wirtualnym hoście.Ale to nie jest mój ulubiony sposób, głównie dlatego, że wymagałoby
stat
wywołania systemowego na żądanie.Dzięki mod_proxy możesz używać,
ProxyPassMatch
jeśli masz wystarczająco nową wersję Apache ( zobacz dokumentację ). Jak na przykład:ProxyPassMatch \.(gif|jpe?g|css|js)$ !
Który wykorzystuje! wskazując, że Apache nie powinien proxy żądań pasujących do tego wyrażenia regularnego.
Jeśli używasz starszej wersji Apache, będziesz mieć do
ProxyPass
dyspozycji dyrektywę, ale pasuje ona tylko do prefiksów URI (jest to moja obecna preferowana metoda):Oczywiście, jeśli musisz wykonać dopasowanie wyrażeń regularnych, jak wspomniano powyżej, możesz po prostu zmodyfikować regułę mod_rewrite, którą zamieściłem na górze, aby zanegować dopasowanie do
%{REQUEST_URI}
.Mam nadzieję, że to pomaga!
źródło
try_files
, ponieważ sprawdza istnienie pliku.ProxyPass
Jednak wydaje się, że nie ma na to sposobu .