NGINX“client_max_body_size”지시문이“location”블록 내에서 작동하지 않습니다


14

/admin내 웹 사이트에 카탈로그 가 있으며 관리자가 웹 양식을 통해 큰 파일을 업로드하도록 허용하고 싶습니다. 내 nginx.com의 모습은 다음과 같습니다.

http {
    # ...
    client_max_body_size 16M;
    # ...

    server {
        server_name example.com;
        root /var/www/example.com;
        index index.php;

        location /admin {
            client_max_body_size 256M;
        }

        # ...
    }
}

작동하지 않습니다. /admin/index.php스크립트가 16Mb보다 큰 파일을 업로드 할 수 없음 : 413 요청 엔티티가 너무 큼

그러나 차단 client_max_body_size하기 위해 이동 하면 server모든 것이 잘 작동합니다. 그러나 나는 admin카탈로그에 대해서만이 변경을하고 싶지 않습니다 .

에 따라 문서 , client_max_body_size내부에 배치 될 수있다 location만 원하는 경로 설정을 무시할 블록.

무엇이 잘못 될 수 있습니까?

답변:


14

제대로 작동합니다. 문제는 위치가 어떻게 작동하는지 오해 한 것입니다. Nginx는 하나의 위치 블록 만 적용하며, 하나 이상의 위치 블록을 적용하지 않습니다. 두 곳에서

location ~ \.php$location /admin와 URI는 /admin/index.php첫 번째 위치를 적용하지만, 두 번째는하지 않습니다 다음. 위치 내에서 다시 쓰기를 사용하더라도 nginx는 지시문을 버리고 새 위치에 대해 지시문을 다시 분석합니다.

이것이 또한 실제로 전체 구성을 게시하여 실제로 잘못된 것을 숨기지 않는 이유이기도합니다.


전체 구성을 게시하지 않은 것에 대해 죄송합니다. 답은 사실이 아닙니다. 다음은 문서의 예입니다. wiki.nginx.org/HttpCoreModule#location 다른 곳에서는 여러 위치 블록이 제대로 작동합니다.
Temnovit

1
죄송하지만 100 % 맞습니다. Nginx는 여러 위치 블록을 검색 할 수 있지만 그 중 하나의 지시문 만 적용합니다. 선택하는 것은 링크 한 페이지에 문서화 된 규칙에 따라 다릅니다.
Martin Fjordvald

@MartinFjordvald 이것에 대한 해결책은 무엇입니까?
chaosguru


1
@ Juanitocalero는 실제로 아닙니다. 공식 문서는 구문과 기본 정보에 대한 참조 문서가 아닌 훌륭한 시작 안내서가 아닙니다.
마틴 피요르드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.