[nginx] nginx-client_max_body_size는 영향을 미치지 않습니다

nginx는 계속 말합니다 client intended to send too large body. 인터넷 검색 및 RTM은 나를 가리 켰습니다 client_max_body_size. 나는로 설정 200m에서 nginx.conf뿐만 아니라에서와 같이 vhost conf, 다시 시작 Nginx에 몇 번을하지만, 난 여전히 오류 메시지를 받고 있어요.

내가 간과 했습니까? 백엔드는 php-fpm( max_post_sizemax_upload_file_size그에 따라 설정 됨)입니다.



답변

다음 의 nginx 문서 , 당신은 client_max_body_size 20m (또는 당신이 필요로하는 값) 다음과 같은 맥락에서 설정할 수 있습니다 :

context: http, server, location


답변

NGINX 대형 업로드가 호스팅 된 WordPress 사이트에서 성공적으로 작동하고 있습니다 (마침내 & rjha94의 제안에 따라).

그들의 제안에 약간의 설명을 추가하면 누군가에게 도움이 될 것이라고 생각했습니다. 우선 모든 3 개의 개별 정의 블록 (서버, 위치 및 http)에 증가 된 업로드 지시문을 포함 시켰는지 확인하십시오. 각각 별도의 줄 항목이 있어야합니다. 결과는 다음과 같습니다 (여기서 …는 정의 블록의 다른 줄을 나타냄).

http {
    ...
    client_max_body_size 200M;
}

(ISPconfig3 설정에서이 블록은 /etc/nginx/nginx.conf 파일에 있습니다)

server {
    ...
    client_max_body_size 200M;
}

location / {
    ...
    client_max_body_size 200M;
}

(ISPconfig3 설정에서이 블록들은 /etc/nginx/conf.d/default.conf 파일에 있습니다)

또한 서버의 php.ini 파일이 이러한 NGINX 설정과 일치하는지 확인하십시오. 필자의 경우 php.ini의 File_Uploads 섹션의 설정을 다음과 같이 변경했습니다.

upload_max_filesize = 200M

참고 : ISPconfig 3 설정을 관리하는 경우 ( 완벽한 서버에 따라 CentOS 6.3에 설정이 있음 ) 여러 항목으로이 항목을 관리해야합니다. 구성이 단계별 설정의 구성과 유사하면 수정해야 할 NGINX conf 파일은 다음 위치에 있습니다.

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf

내 php.ini 파일은 다음 위치에 있습니다.

/etc/php.ini

nginx.conf 파일에서 http {} 블록을 계속 간과했습니다. 이것을 간과하면 업로드를 1M 기본 제한으로 제한하는 효과가있었습니다. 연관된 변경을 수행 한 후에는 NGINX 및 PHP FastCGI Process Manager (PHP-FPM) 서비스를 다시 시작해야합니다. 위의 구성에서 다음 명령을 사용합니다.

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart


답변

현재 2016년 3월 , 나는 (그것이 중요하지 않는 것이, 파이썬 요청에서) HTTPS를 통해 POST의 JSON하려고이 문제에 달렸다.

속임수는 “client_max_body_size 200M;”입니다. 두 개 이상의 장소에서 http {}server {} :

1.http 디렉토리

  • 일반적으로 /etc/nginx/nginx.conf

2.server 호스트 의 디렉토리.

  • apt-get을 통해 설치 한 데비안 / 우분투 사용자 (및 기본적으로 /etc/nginx/sites-available/mysite.comvgins 와 함께 nginx를 설치하는 다른 배포판 패키지 관리자)의 경우 vhost가없는 사용자의 경우 아마도 nginx.conf이거나 동일한 디렉토리에있을 것입니다.

3. 2location / 와 같은 위치에 있는 디렉토리

  • 보다 구체적 일 수는 /있지만 전혀 작동하지 않으면 이것을 적용 /한 다음 작동이 더 구체적 일 것을 권장 합니다.

기억 – 당신은 SSL이있는 경우, 즉 SSL에 대한 위의를 설정해야하는 것 server하고 location도 어디든지 그 (이상적으로 동일 할 수있다 2 ). 클라이언트가 http에 업로드하려고하고 https에 301’d를 얻으려는 경우 http 서버에 비해 파일이 너무 커서 리디렉션하기 전에 nginx가 실제로 연결을 끊는 것으로 나타났습니다. 에서 모두 .

최근 의견에 따르면 최신 nginx 버전의 SSL에는 문제가 있지만 1.4.6에 있고 모든 것이 좋습니다 🙂


답변

다음 변경 사항을 적용해야합니다.

  1. 업데이트 php.ini(오른쪽에서 INI 파일 찾기 phpinfo();)와 증가 post_max_sizeupload_max_filesize크기 당신이 원하는 :

    sed -i "s/post_max_size =.*/post_max_size = 200M/g" /etc/php5/fpm/php.ini
    sed -i "s/upload_max_filesize =.*/upload_max_filesize = 200M/g" /etc/php5/fpm/php.ini```
    
  2. 웹 사이트의 NginX 설정을 업데이트 하고 , 또는 컨텍스트에 client_max_body_size가치를 추가 하십시오 .locationhttpserver

    location / {
        client_max_body_size 200m;
        ...
    }
    
  3. NginX 및 PHP-FPM을 다시 시작하십시오.

    service nginx restart
    service php5-fpm restart
    

참고 : 언젠가 (내 경우에는 거의 매번) php-fpm서비스 명령으로 올바르게 새로 고치지 않으면 프로세스 를 종료해야합니다 . 이를 위해 프로세스 목록 ( ps -elf | grep php-fpm)을 가져와 하나씩 죽이거나 ( kill -9 12345) 다음 명령을 사용하여 수행 할 수 있습니다.

ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9


답변

위치 {} 블록이 아닌 http {} 블록 내에 client_max_body_size 지시문을 설정하고 있는지 확인하십시오. http {} 블록 안에 설정했으며 작동합니다.


답변

이것이 나쁜 경우 누군가가 나를 수정하지만 가능한 한 모든 것을 잠그고 싶습니다. 업로드 대상이 하나만 있으면 (보통 경우와 같이) 변경 사항을 해당 파일로 지정하십시오. 이것은 Ubuntu nginx-extras mainline 1.7+ 패키지에서 작동합니다.

location = /upload.php {
    client_max_body_size 102M;
    fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
    (...)
}


답변

나는 최근에 비슷한 문제가 있었고 client_max_body_size 0;그러한 문제를 해결할 수 있다는 것을 알았습니다 . client_max_body_size 를 무제한으로 설정 합니다. 그러나 모범 사례는 코드를 개선하는 것이므로이 제한을 늘릴 필요가 없습니다.