Fastly 설정 적용 조건 설정

5911 단어 fastlyVCLConfig
Fastly는 다양한 설정이 있지만 각 설정에 대해 조건을 설정할 수 있다.예를 들어 요청한 URL에 특정 문자열이 포함된 경우 특정 오리지널 서버를 활용하거나 응답에 특정 헤더가 포함된 경우 캐시 시간을 단축하는 등이다.
여기에 조건의 설정과 적용 방법을 소개한다.

조건의 설정 방법과 응용 절차


기본적으로 아래의 절차에 따라 적용 조건에 따라 설정한다.
1. 설정 만들기
2. 1에 대한 응용 조건 설정(기존 조건을 유용할 수 있는 상황에서 선택)
여기에 2의 조건 설정을 설명한다.조건 설정은 구체적인 설정을 보면 이해하기 쉽다. 다음은 몇 가지 예를 소개하여 설명한다.

조건 설정 예


영역에 따라 사냥꾼자리를 분배하다


Fastly의 서비스는 한 서비스에 여러 영역을 설정할 수 있다.분야별로 구분해서 사용하고자 하는 오리온의 상황을 소개한다.
사냥꾼자리에 대한 설정이 되어 있을 거예요.CONFIGURE-ORIGIN를 선택하면 다음 화면이 표시됩니다.조건을 적용할 올리브 서버Attach a condition를 선택하십시오.

다음 화면을 엽니다.

이미 존재하는 조건을 유용하려면 Select a condition에서 선택할 수 있지만 여기는 새로 만들어졌기 때문에 선택CREATE A NEW REQUEST CONDTION을 하면 조건 설정 화면이 열립니다.
  • Type: 설정 위치에 따라 다릅니다.이 경우 사냥꾼자리 선택에 맞춰 설정된 것이기 때문에 Request만 설정할 수 있습니다.
  • Name: 식별 설정의 이름을 설정합니다.중복되지 않으면 임의로 설정할 수 있다.
  • Apply if...: 조건을 기재하다.여기에 기재되어 있다req.http.host == "www.a-example.com".이것은 요청한 호스트 헤더가 www.a-example.com일 때 이 설정이 적용된다는 것을 의미한다.
  • Adjust priority: 실행할 위치를 결정합니다.숫자는 작은 순서대로 집행된다.기본값은 10이며 이 경우 유지됩니다.
  • 이 설정을 진행할 때의 실제 코드를 봅시다.설정 동작을 하지 않아도 코드를 확인할 수 있다.OPTIONS에서 Show VCL을 선택하면 다음 코드가 추가되었는지 확인할 수 있습니다.Activate를 수행한 경우 설정이 완료됩니다.
      # Request Condition: Use Origin A Prio: 10
      if( req.http.host == "www.a-example.com" ) {
    
        set req.backend = F_a-example.com;
    
    
          }
      #end condition
    

    200번 테이블 이외의 곳에서 상륙하다


    다음은 로그에 적용해 봅시다.로그 용량 문제로 인해 정상적으로 로그인하지 않고 예상치 못한 요청에만 로그를 기록하는 경우가 발생할 수 있습니다.나는 그 조건을 설정하려고 했다.
    이번에는 로그 설정이라 선택CONFIGURE-LOGGING.상응하는 로그Attach a condition를 선택하면 CREATE A NEW REQUEST CONDTION부터 조건 설정을 열 때까지 동일합니다.
    기본적으로 로그는 컨텐트를 보낼 때 출력되므로 Type은 Response입니다.아래 설정을 통해 200번 데스크톱 이외의 데스크톱을 로그 출력의 조건으로 삼을 수 있다.

    특정 URL을 pass로 설정


    이 사용 방법은 아마도 가장 유행할 것이다.기본적으로 캐시이지만 특정 경로를 포함하는 URL은 캐시되지 않습니다.
    이 설정은 CONFIGURE-SETTINGS-Request settings부터 시작합니다.화면 안에Attach a condition의 링크가 있는데 이 설정은 이전의 설정과 같은 조건을 설정한다.

    제작된 코드를 보니 다음과 같은 내용이 기재되어 있어 설정할 수 있을 것 같다.
      # Request Condition: url pass Prio: 10
      if( req.url ~ "^/pass/" ) {        
    
           if (!req.http.Fastly-FF) {
             if (req.http.X-Forwarded-For) {
               set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For ", " client.ip;
             } else {
               set req.http.Fastly-Temp-XFF = client.ip;
             }
           } else {
             set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;
           }
    
            return(pass);  
    
          }
      #end condition
    
    Activate를 하면 정상적으로 작동해야 하지만, 여기서 프로리티를 좀 고려해 봅시다.
    이 코드 위에 다음과 같은 내용이 있다고 가정해 보세요.이것은 png 확장자가 있는 파일에 캐시할 코드입니다.근거 return(lookup)vclrecv 아래의 코드는 실행되지 않습니다.따라서 /pass/example.png와 같은 파일이 있으면 png 파일과 같은 조건이 먼저 적용되고 캐시됩니다.
    이 파일을 패스로 만들려면 어떻게 해야 할까요?조건을 변경할 수 있는 몇 가지 방법이 있지만 프로리티 변경을 통해서도 가능하다.위에서 설명한 대로 Prority는 실행 순서를 변경할 수 있습니다.예를 들어 이 경우 프로리티의 값5/pass/example.png으로 설정하면pass의 코드는 png의 코드보다 먼저 실행되고pass는 URL에 포함된 조건을 먼저 적용^한 다음pass를 한다.
      # Request Condition: cache png Prio: 10
      if( req.url.ext == "png" ) {
    
           if (!req.http.Fastly-FF) {
             if (req.http.X-Forwarded-For) {
               set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For ", " client.ip;
             } else {
               set req.http.Fastly-Temp-XFF = client.ip;
             }
           } else {
             set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;
           }
    
          return(lookup);    
    
          }
      #end condition
    
    이러한 조건 설정은 기본적으로 GUI에서 구현할 수 있습니다.그러나 충돌하는 설정이 있다면 어느 것을 먼저 실시해야 할지 고민하면서 프로리티의 값으로 순서를 제어하면 더욱 유연한 설정이 가능하다.

    조건에 대한 조건문


    영어 문서는 참고하십시오VCL regular expression cheat sheet.아래의 몇 가지 예를 들자.

  • req.url.ext="jpg": 확장자가 jpg인 경우(1)(완전 일치)

  • req.http.호스트 첫 번째 (필드) 는 www로 시작합니다.~는 시작 문자를 나타냅니다.. 부분은 일치하며 www로 시작하면 뒤에는 임의입니다.

  • req.확장자가 jpg일 때(2).\에서 도피하고 마침표를 표시한다.$는 마지막 문자
  • 를 나타낸다

  • req.확장자는 png, jpg, css, js 중 하나입니다.|에서 OR을 나타냅니다.

  • req.유효기간이 끝나면 검색어를 뒤에 연결할 수 있습니다.\?에서 문자?를 나타낸다.이외의 .,*,?는 정규 표현식의 특수 문자이다.

  • req.그 중 한 글자 + 서버는 확장자입니다.

  • req.http.cookie && req.http.User-Agent: 요청에 쿠키와 User-Agent 헤더가 있을 때.abc는 조건문의 AND입니다.

  • beresp.status == 500 || beresp.status==503: 응답하는 상태 코드가 500 또는 503인 경우.&&는 조건문 OR입니다.

  • !req.url : req.url이 존재하지 않을 때.||는 부정을 나타낸다.req.url은 기본적으로 모든 요청에 존재하기 때문에 이 조건은 항상 가짜입니다.
  • 좋은 웹페이지 즐겨찾기