재작성을 사용하는 동안에만 단일 URL에 대해 client_max_body_size를 적용하세요.

재작성을 사용하는 동안에만 단일 URL에 대해 client_max_body_size를 적용하세요.

이 질문은 다음과 유사합니다.단일 URL에만 client_max_body_size 적용하지만 재작성으로 인해 다릅니다.

끝점에서는 더 큰 몸체 크기를 허용하고 싶지만 lg다른 부분에서는 허용하지 않습니다. 내 기존 구성은 다음과 같습니다.

location /xyz/ {
  rewrite ^/xyz/(.*) /$1 break;
  proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}

아래와 같은 작업을 수행하고 싶지만 계속 오류가 발생하거나 단순히 작동하지 않습니다.

location /xyz/ {
  rewrite ^/xyz/(.*) /$1 break;
  ...
  location /xyz/lg {
    client_max_body_size 2m;
  }
}

중첩된 URL에 대해 정규식을 사용해 보았지만 다음과 같은 결과만 얻었습니다.

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location,

답변1

후행을 사용하면 동일한 작업을 수행하므로 필요하지 않으므로 원본 블록 rewrite...break을 다음과 같이 단순화할 수 있습니다.proxy_pass/location

location /xyz/ {
    proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}

명령문은 블록 client_max_body_size내에 배치되어야 하며 해당 지시문은 상속되지 않으므로 location해당 블록에도 명령문이 필요합니다 .proxy_pass

예를 들어:

location /xyz/ {
    proxy_pass http://{{proxy_host}}:{{proxy_port}}/;
}
location /xyz/lg {
    client_max_body_size 2m;
    proxy_pass http://{{proxy_host}}:{{proxy_port}}/lg;
}

블록 을 중첩할 수도 있지만 location상속할 항목이 없으므로 의미가 없습니다.

lgURI의 일부가 새 문과 locationproxy_pass문 모두에 추가됩니다.

이 예에서는 client_max_body_size다음과 같은 모든 URI에 대해다음으로 시작 /xyz/lg, 예를 들어 /xyz/lg, /xyz/lgfoo/xyz/lg/bar.

관련 정보