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

기본적으로 정규식을 결합하면 됩니다.

관련 정보