ApacheのNginxのtry_filesと同等のものは何ですか?


12

Nginxにはtry_files、「ファイルの存在を順番にチェックし、見つかった最初のファイルを返す」構成ディレクティブがあります。私はこれをするのがとてもきれいだと思う

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

これは、Webフレームワークに煩わされることなく、静的ファイルを直接提供する安全な方法です。Apacheで同じことを行うにはどうすればよいですか?


1
あなたが行った解決策は何でしたか?選択した答えは、実際に私のユースケースを満たしていません。
パネペテル

回答:


9

私はこれをmod_rewriteでよく見ます:

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

「ファイルがファイルシステムに存在しない場合、mod_proxy_balancerクラスターを介してプロキシする」という意味です。それ以外の場合、ファイルがファイルシステムに存在する場合、DocumentRoot仮想ホストで定義されたものに関連して、Apacheによって単純に提供されます。

しかし、それは私のお気に入りの方法ではありません。主にstatリクエストごとにシステムコールが必要になるからです。

mod_proxyを使用ProxyPassMatchすると、Apacheの新しいバージョンが十分にある場合に使用できます(ドキュメントを参照)。といった:

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

を使用する!Apacheがその正規表現に一致するリクエストをプロキシしてはならないことを示すため。

古いバージョンのApacheを使用している場合は、ProxyPassディレクティブを使用できますが、URIプレフィックスのみに一致します(これは現在の推奨方法です)。

ProxyPass /images !
ProxyPass /stylesheets !

もちろん、上記のように正規表現の一致を行う必要がある場合は、上に投稿したmod_rewriteルールを変更して、に対する一致を無効にすることができます%{REQUEST_URI}

お役に立てば幸いです!


2
「悪い」方法はtry_files、ファイルの存在をチェックするため、より似ていると思います。ProxyPassしかし、それを行う方法はないようです。
プネヘヘ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.