web-dev-qa-db-ja.com

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/")"を削除すると、すべてが正常に再起動しますが、必要なものを一致させることができません。構成ファイルに適切なステートメントを書き込むにはどうすればよいですか?

4
Dave

Nginxでは、 もし悪なら 。しかし、本当にそのようにしたい場合は、次のようにします。

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

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

3
Brennen Smith