Как правильно написать оператор «or» в блоке местоположения Nginx?

Как правильно написать оператор «or» в блоке местоположения Nginx?

Я использую Nginx на CentOS 7. Я хочу добавить заголовок управления кэшем для файлов, которые заканчиваются на определенное расширение или содержат строку "/image/" в URL. Я попробовал это

  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)$)") {

По сути, просто объедините регулярные выражения.

Связанный контент