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_size및 max_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_size및 upload_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.