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


205

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그에 따라 설정 됨)입니다.


4
SSL을 사용하도록 설정 한 상태에서 client_max_body_size에 문제가 있습니다. 방금 nginx 버전에서 동일한 문제가 발생했으며 보안 연결 에서이 지시문을 무시합니다. 아직도 해결책을 찾고 있습니다.
Neolo

14
다른 사람이 이것을 구글로 처리하는 경우 : Ubuntu 12.04의 Nginx 1.1.19 는 'http'지시문에서 client_max_body_size를 무시하는 것으로 보이지만 'server'에서는 괜찮습니다. 이것은 지난 6 개월 정도의 업데이트에서 소개 된 것 같습니다. 왜냐하면 같은 서버의 동일한 구성 파일이 작동하기 때문입니다.
Dave

1
@Dave 그리고 2018 년에 여기에 오면이 부분이 수정 된 것 같습니다 client_max_body_size. http섹션 에서 nginx 버전 1.14.1에서 예상되는 효과가 있습니다
DomQ

컨텐츠 길이 헤더 (최소 1.4.6 이상)를 확인하므로 설정되지 않은 컨텐츠 길이로 컨텐츠를 업로드하거나 컨텐츠 길이를 최대 본문 크기보다 작은 값으로 설정하면 HTTP 413
Charles가

답변:


131

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

context: http, server, location

20
그것은 제 위치에서 작동하지 않았고 서버 컨텍스트에서 작동했습니다. 재정의되었는지 확실하지 않습니다.
Dipen

@ 디펜 : 흥미 롭습니다. 어떤 버전의 NGinx가 있습니까?
nembleton 2016 년

7
Dipen이 말한 것을 Ditto는 서버 {} 또는 location {} 블록에서 얻을 수 없다는 점을 제외하고는 http {} 컨텍스트에서만 작동합니다. 홀수
로비

4
http {} 섹션의 Debian GNU / Linux 7.1 (wheezy)에서 실행되는 nginx / 1.4.1에서만 작동 함을 확인할 수 있습니다.
Fernando Kosh

설정 http또는 location설정 시 설정 확인에 실패합니다 . server레벨 설정시 작동 합니다. nginx / 1.4.4
AlbertEngelB

104

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

24
/etc/init.d/nginx reload대신 사용 하는 것이 좋습니다 . 이것은 '설정이 틀린 경우'와 같은 이점을 추가했습니다. NginX는 작동을 멈추지 않습니다.
Hengjie

정말 도움이되었습니다 감사합니다! 다양한 php.ini 파일 설정 등으로 해킹 한 후 내 문제가 해결되었습니다.
Yos

소문자 m은 우리를 위해 일했습니다. client_max_body_size 100m;
so_mv

13
@Hengjie 대신 ( nginx -t구성 파일 구문을 테스트 nginx -s reload) 대신 (실제 재로드를 수행) 권장 합니다.
Anoyz

내 vagrant box에는 /etc/php5/cli/php.ini와 /etc/php5/fpm/php.ini라는 두 개의 ini 파일이 있으며 Symfony의로드 된 구성은 fpm 파일이라는 것을 지적해야합니다. 따라서 이것을 편집하는 것을 잊지 마십시오.
Jalal

65

현재 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에 있고 모든 것이 좋습니다 :)


3
설명서에는 기본값이 "1m"으로 표시되어 1MB가 아닌 1MB로 밝혀졌습니다. 아직 테스트하지는 않았지만 항상 메가 바이트라고 생각합니다.
토마스

2
@ 토마스 그래, 항상 M이 아니 었으므로 테스트를 직접 실행했기 때문에 확실히 메가 바이트입니다.
CppLearner

1
둘 다 감사합니다-비트 / 바이트 비트를 삭제했습니다.
JJ

2
2018 및 nginx 버전 1.14.1 부터는 고정 된 것으로 보입니다 . 다른 곳에 추가하지 않아도 client_max_body_size섹션에서 영광입니다 http.
DomQ

27

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

  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

12

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


11

이것이 나쁜 경우 누군가가 나를 수정하지만 가능한 한 모든 것을 잠그고 싶습니다. 업로드 대상이 하나만 있으면 (보통 경우와 같이) 변경 사항을 해당 파일로 지정하십시오. 이것은 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";
    (...)
}

나는이 아이디어도 좋아하지만 나에게는 이것이 작동하지 않는다. 내가 할 수있는 일은 값을 줄이고 위치 수준에서 늘리지 않는 것입니다.
Geza Turi

4

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


3

이미 다른 답변에서 client_max_body_size 및 다양한 PHP 설정 (upload_max_filesize / post_max_size 등)을 설정 한 다음 아무런 결과없이 NGINX 및 PHP를 다시 시작하거나 다시로드했다고 가정하면이를 실행하십시오 ...

nginx -T

NGINX 설정에서 해결되지 않은 오류가 발생합니다. 필자의 경우 수정해야 할 NGINX 구성 (인증서에 대한 잘못된 경로 지정)에 다른 해결되지 않은 SSL 오류가 있음을 깨닫기 전에 하루 종일 413 오류로 어려움을 겪었습니다. 해결되지 않은 문제를 해결하면 'nginx -T', NGINX 및 EUREKA에서 다시로드되었습니다! 그것은 그것을 고쳤다.


3

오래된 라이브 서버를 미러링하는 데 사용할 dev 서버를 설정하고 있는데, The Perfect Server-Ubuntu 14.04 (nginx, BIND, MySQL, PHP, Postfix, Dovecot 및 ISPConfig 3)를 사용했습니다.

같은 문제가 발생하면이 게시물을 발견했지만 아무것도 작동하지 않았습니다. 모든 권장 파일 (nginx.conf, ispconfig.vhost, / sites-available / default 등)의 값을 변경했습니다.

마지막으로, 변화 client_max_body_size내에서 /etc/nginx/sites-available/apps.vhost와의 nginx를 다시 시작하면 트릭을했던 것입니다. 잘하면 그것은 다른 누군가를 돕습니다.


3

나는 같은 문제를 만났지만 nginx와 관련이 없다는 것을 알았습니다. nodejs를 백엔드 서버로 사용하고 nginx를 리버스 프록시로 사용하고 413 코드가 노드 서버에 의해 트리거됩니다. 노드 사용 koa 는 본문을 구문 분석합니다. koa는 urlencoded 길이를 제한합니다.

formLimit : urlencoded 본문의 제한. 본문이이 한계보다 큰 경우 413 오류 코드가 반환됩니다. 기본값은 56kb입니다.

formLimit를 더 크게 설정하면이 문제를 해결할 수 있습니다.


0

client_max_body_size지시문이 무시 된 것과 동일한 문제가 있습니다.

내 어리석은 오류는 파일을 안에 /etc/nginx/conf.d넣지 않는다는 것입니다 .conf. Nginx는 기본적으로 이것들을로드하지 않습니다.


-2

Windows 버전 nginx를 사용하는 경우 모든 nginx 프로세스를 종료하고 다시 시작하여 볼 수 있습니다. 내 환경에서 동일한 문제가 발생했지만이 솔루션으로 해결했습니다.


그게 내 문제 였어, 고마워! 하나의 Nginx 인스턴스가 올바르게 종료되지 않았습니다. 이 창에 종료되는 경우는 확인 결코 나쁜tasklist /fi "imagename eq nginx.exe"
발레리 바라 노프
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.