Apache'nin Nginx'in try_files eşdeğeri nedir?


12

Nginx'te try_files, "dosyaların varlığını sırayla kontrol eden ve bulunan ilk dosyayı döndüren" bir yapılandırma yönergesi vardır. Bunu yapmak çok temiz buluyorum

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

web çerçevelerini rahatsız etmeden, statik dosyaları doğrudan sunmanın güvenli bir yoludur. Aynı şeyi Apache'de nasıl yapabilirim?


1
Çözdüğünüz çözüm neydi? Seçilen cevap kullanım durumumu tam olarak karşılamıyor.
panepeter

Yanıtlar:


9

Genellikle bu mod_rewrite ile yapılır bakın:

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

Bu, "Dosya sisteminde bir dosya yoksa, mod_proxy_balancer kümem aracılığıyla proxy'yi oluşturun" anlamına gelir. Aksi takdirde, dosya dosya sisteminde varsa, DocumentRootsanal ana makinenizde tanımlanana göre Apache tarafından sunulur .

Ama bu benim en sevdiğim yol değil, çünkü çoğunlukla statistek başına bir sistem çağrısı gerektiriyordu .

Mod_proxy ile ProxyPassMatchyeterince yeni bir Apache sürümünüz varsa kullanabilirsiniz ( belgelere bakın ). Gibi:

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

Hangi kullanır! belirtmek için Apache gerektiğini değil o düzenli ifade ile eşleşen vekil istekleri.

Apache'nin daha eski bir sürümünü kullanıyorsanız, ProxyPassyönergeyi kullanabileceksiniz, ancak yalnızca URI önekleriyle eşleşiyor (bu benim şu an tercih ettiğim yöntem):

ProxyPass /images !
ProxyPass /stylesheets !

Tabii ki, yukarıda belirtildiği gibi düzenli ifade eşlemesi yapmanız gerekiyorsa, o zaman bir eşleşmeyi reddetmek için üstte gönderdiğim mod_rewrite kuralını değiştirebilirsiniz %{REQUEST_URI}.

Umarım yardımcı olur!


2
Bence "kötü" yol daha benzer try_files, çünkü dosyanın varlığını kontrol eder. Yine de bunu yapmanın bir yolu yok gibi görünüyor ProxyPass.
phunehehe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.