위치 블록 당 Nginx client_max_body_size (php 프론트 컨트롤러 패턴)


8

이 문제 에 대한 해결책을 찾고 있습니다 . 해당 질문의 설정이 작동하지 않는 이유를 이해하지만 작동시킬 수있는 솔루션을 얻으려고합니다.

아이디어는 특정 URL에서만 큰 파일 업로드를 허용하는 것입니다. 나는 location이것을 위해 블록을 사용할 수 있지만 문제는 : PHP 프론트 컨트롤러 패턴이 있습니다 :

location ~ \.php {
    # ...
    fastcgi_pass unix:/tmp/php5-fpm.sock;
}

내 총 설정은 다음과 같습니다.

# ...

http {
    # ...

    client_max_body_size 512K;

    server {
        server_name example.com;
        root        /var/www/example.com/public;

        location / { 
            try_files $uri /index.php?$query_string;
        }

        location /admin/upload {
            client_max_body_size 256M;
        }

        location ~ \.php {
            # ...

            fastcgi_pass unix:/tmp/php5-fpm.sock;
        }
    }
}

내가 이해하는 것처럼 하나의 위치 블록 만 적용됩니다. 따라서 기본 요청 크기가 512K 인 경우 모든 요청이 프론트 컨트롤러 패턴을 통해 일치되므로 256M이 적용되지 않습니다 ~ \.php.

이 경우에 맞 admin/upload습니까? 그렇다면 방문자가 업로드 할 때를 제외하고는 아무것도 업로드 할 수 없도록 구성 할 수있는 것은 무엇 입니까?

답변:


2

두 개의 PHP 위치를 정의 하시겠습니까?

location ~ ^/admin/upload/.+\.php$
{
    client_max_body_size 256M;
    include /etc/nginx/conf.d/php-fpm.conf;
}   
location ~ \.php
{
    include /etc/nginx/conf.d/php-fpm.conf;
}

아마도 가장 예쁘지는 않지만 ... 기능적이어야합니다 ..


1

경우 /admin/upload경로는 가상이고, 그것으로 다음 작업을 할 수 있습니다 :

location / {
    try_files $uri /index.php?$args;
}

location /admin/upload {
    client_max_body_size 256M;

    include inc/php.conf;
    rewrite ^(.*)$ /index.php?$args break;
}

location ~ \.php$ {
    include inc/php.conf;
}

가장 예쁘지는 않지만 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.