Apa yang setara dengan Apache dari try_files Nginx?


12

Di Nginx ada try_files, perintah konfigurasi yang "memeriksa keberadaan file secara berurutan, dan mengembalikan file pertama yang ditemukan". Saya merasa sangat rapi untuk melakukan ini

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

yang merupakan cara aman untuk langsung menyajikan file-file statis, tanpa mengganggu kerangka web. Bagaimana saya bisa melakukan hal yang sama di Apache?


1
Apa solusi yang Anda pilih? Jawaban yang dipilih tidak benar-benar memenuhi kasus penggunaan saya.
panepeter

Jawaban:


9

Saya biasanya melihat ini dilakukan dengan mod_rewrite:

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

Ini berarti "Jika suatu file tidak ada pada sistem file, maka proksi itu melalui cluster mod_proxy_balancer saya." Jika tidak, jika file ada pada sistem file, itu hanya dilayani oleh Apache relatif terhadap yang didefinisikan DocumentRootdi virtualhost Anda.

Tapi itu bukan cara favorit saya, terutama karena itu akan membutuhkan statpanggilan sistem per permintaan.

Dengan mod_proxy, Anda dapat menggunakan ProxyPassMatchjika Anda memiliki versi Apache yang cukup baru ( lihat dokumentasi ). Seperti:

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

Yang menggunakan! untuk menunjukkan Apache tidak boleh meminta proxy yang cocok dengan ekspresi reguler itu.

Jika Anda menggunakan versi Apache yang lebih lama, Anda akan memiliki ProxyPassarahan yang tersedia untuk Anda, tetapi itu hanya cocok dengan awalan URI (ini adalah metode pilihan saya saat ini):

ProxyPass /images !
ProxyPass /stylesheets !

Tentu saja, jika Anda harus melakukan pencocokan ekspresi reguler seperti yang Anda sebutkan di atas, maka Anda cukup memodifikasi aturan mod_rewrite yang saya posting di atas untuk meniadakan kecocokan terhadap %{REQUEST_URI}.

Semoga itu bisa membantu!


2
Saya pikir cara "buruk" lebih mirip try_files, karena memeriksa keberadaan file. Sepertinya tidak ada cara untuk melakukannya ProxyPass.
phunehehe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.