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

/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만 원하는 경로 설정을 무시할 블록.

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



답변

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

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

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


답변