Nginx のロケーション ブロックに「or」ステートメントを適切に記述するにはどうすればよいですか?

Nginx のロケーション ブロックに「or」ステートメントを適切に記述するにはどうすればよいですか?

CentOS 7でNginxを使用しています。特定の拡張子で終わるファイルやURLに「/image/」文字列を含むファイルにキャッシュ制御ヘッダーを追加したいのですが、これを試しました。

  location / {
    proxy_pass http://scale; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    if ($request_uri ~* ".(ico|gif|jpe?g|png)$") | ($request_uri ~* "/image/") {
      expires 60d;
      access_log off;
      add_header Pragma public;
      add_header Cache-Control "public";
      break;
    }
  }

しかし、サーバーを再起動すると、

invalid condition "$request_uri" in /etc/nginx/conf.d/scale.conf:16

エラー。問題のある行から「 | ($request_uri ~* "/image/")」を削除すると、すべて正常に再起動しますが、必要な項目を一致させることができません。構成ファイルに適切な or ステートメントを記述するにはどうすればよいですか?

答え1

nginxでは、悪であればしかし、本当にそのようにしたい場合は、次のようにします。

if ($request_uri ~* "($\/image\/.*)|(.*\.(ico|gif|jpe?g|png)$)") {

基本的には、正規表現を組み合わせるだけです。

関連情報