Webプロジェクトの静的コンテンツは、/ content/imgフォルダーにあります。 URLルールは/ img/{some md5}ですが、フォルダー内の場所:/ content/img/{最初の2桁} /
例
url: example.com/img/fe5afe0482195afff9390692a6cc23e1
location: /www/myproject/content/img/fe/fe5afe0482195afff9390692a6cc23e1
このnginxの場所は正しいですが、セキュリティはそれほどではありません(正規表現ではシンボルポイントは適切ではありません)。
location ~ /img/(..)(.+)$ {
alias $project_home/content/img/$1/$1$2;
add_header Content-Type image/jpg;
}
次の場所はより正確ですが機能しません:
location ~ /img/([0-9a-f]\{2\})([0-9a-f]+)$ {
alias $project_home/content/img/$1/$1$2;
add_header Content-Type image/jpg;
}
より正確なnginxの場所のエラーを見つけるのに役立ちます。
POSIX BREパターンでは制限量指定子で中括弧をエスケープする必要があり、NGINXはその正規表現フレーバーを使用しません。ここでは、制限量括弧をエスケープしないでください。ただし、括弧を正規表現パターン文字列の一部として渡すことをNGINXに通知する必要があります。
したがって、パターン全体を二重引用符で囲む必要があります。
使用する
location ~ "/img/([0-9a-fA-F]{2})([0-9a-fA-F]+)$"
これが regexデモ です。
現在のシナリオでは、サブパターンを繰り返すだけでよいことに注意してください。
/img/([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]+)$
^^^^^^^^^^^^^^^^^^^^^^^^
次のようにロケーション部分を二重引用符で囲んで動作させました:
location ~ "/img/([0-9a-f]{2})([0-9a-f]+)$"
その理由は、Nginxが中括弧を使用して構成ブロックを定義しているため、ロケーションブロックを開いていると考えているためです。