nginx/Passenger: 매개변수가 요청되지 않은 경우에만 캐시된 파일 제공

nginx/Passenger: 매개변수가 요청되지 않은 경우에만 캐시된 파일 제공

특정 URL 패턴( /scripts/.*\.meta\.js)에 대해 다음과 같은 동작을 원합니다.

  • URL에 특정 매개변수( version)가 포함된 경우 승객에게 요청을 전달하여 처리합니다.
  • URL에 특정 매개변수가 포함되어 있지 않고 캐시된 파일이 존재하는 경우 해당 파일을 제공하세요.
  • URL에 해당 특정 매개변수가 포함되어 있지 않고 캐시된 파일이 존재하지 않는 경우 승객이 처리할 요청을 제공합니다.

Passenger와 그 뒤에 있는 Rails 앱이 이 경로에 대한 대부분의 요청을 처리하지 않도록 하여 성능을 향상시키기 위해 이 작업을 수행하고 있습니다.

내 nginx conf 파일은 다음과 같습니다.

server {

  listen 80;
  server_name my.site;

  root /path/to/rails/public;
  passenger_enabled on;
  rails_env development;
  passenger_min_instances 1;

  client_max_body_size 5m;

  location ~* /scripts/.*\.meta\.js {

    error_page 418 = @noparams;

    if ( $arg_version = '' ) {
      return 418;
    }
  }

  location @passenger {
    root /path/to/rails/public;
    proxy_set_header X-Forwarded-Proto http;
    passenger_enabled on;
  }

  location @noparams {
    try_files  /a$uri @passenger =401;
  }

}

아래에 테스트 파일을 배치했습니다 /path/to/rails/public/a. 이는 다음과 같은 동작을 제공합니다.

  • ✓ URL에 특정 매개변수( version)가 포함된 경우 승객에게 처리 요청을 전달합니다.
  • ✓ URL에 특정 매개변수가 포함되어 있지 않고 캐시된 파일이 존재하는 경우 해당 파일을 제공하세요.
  • ❌ URL에 해당 특정 매개변수가 포함되어 있지 않고, 캐시된 파일도 존재하지 않는 경우, 승객이 처리하도록 요청하세요.실제 동작: HTTP 401.

내가 가지고 있는 것은 에서 Passenger를 참조하는 올바른 방법이 아닌 것 같습니다 try_files. 이 작업을 수행하려면 어떻게 해야 합니까?

답변1

try_files나는 시도할 "사물"의 목록이라는 인상을 받았고 이름이 지정된 위치를 어느 위치에나 넣을 수 있었습니다. Michael Hampton이 의견에서 언급했듯이 이는 잘못된 것입니다. 명명된 위치와 HTTP 코드는 의 마지막 위치에만 있을 수 있습니다 try_files. 마지막 위치에 없는 것은 모두 파일 경로여야 합니다. 그래서 try_files /a$uri @passenger내가 의도한 대로 작동합니다.

@passenger블록 에서 상속되기 때문에 내부에서 구성을 반복할 필요도 없습니다 server. 따라서 작업 구성은 다음과 같습니다.

server {

  listen 80;
  server_name my.site;

  root /path/to/rails/public;
  passenger_enabled on;
  rails_env development;
  passenger_min_instances 1;

  client_max_body_size 5m;

  location ~* /scripts/.*\.meta\.js {

    error_page 418 = @noparams;

    if ( $arg_version = '' ) {
      return 418;
    }
  }

  location @passenger { }

  location @noparams {
    try_files  /a$uri @passenger;
  }

}

관련 정보