Как правильно написать оператор «или» в блок местоположения 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 /") "из проблемной строки, все перезапускается нормально, но потом я м не могу найти то, что хочу. Как мне написать правильное выражение или в моем файле конфигурации?

3
задан 3 March 2018 в 02:01
1 ответ

В nginx, если есть зло . Но если вы действительно хотите сделать это так, вот как вы это сделаете:

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

По сути, просто объедините регексы.

.
2
ответ дан 3 December 2019 в 06:55

Теги

Похожие вопросы