Nginxには try_files
、「ファイルの存在を順番に確認し、最初に見つかったファイルを返す」設定ディレクティブ。私はこれをするのがとてもいいと思います
location ~* \.(gif|jpe?g|css|js)$ {
try_files $uri 404;
}
これは、Webフレームワークを邪魔することなく、静的ファイルを直接提供する安全な方法です。 Apacheで同じことをするにはどうすればよいですか?
私は通常、これを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を使用すると、Apacheの新しい十分なバージョンがある場合はProxyPassMatch
を使用できます( ドキュメントを参照 )。といった:
ProxyPassMatch \.(gif|jpe?g|css|js)$ !
これは! Apacheがその正規表現に一致するリクエストをプロキシする必要があるないことを示します。
古いバージョンのApacheを使用している場合は、ProxyPass
ディレクティブを使用できますが、これはURIプレフィックスにのみ一致します(これが現在の推奨方法です)。
_ProxyPass /images !
ProxyPass /stylesheets !
_
もちろん、上記のように正規表現マッチングを実行する必要がある場合は、上部に投稿したmod_rewriteルールを変更して、_%{REQUEST_URI}
_に対するマッチングを無効にすることができます。
お役に立てば幸いです。