2017-09-12 3 views
0

J'ai un problème nginx. J'utilise NGINX comme proxy inverse et nodejs comme backend et Mongodb comme DB. De quelques jours, je reçois une erreur étrange dit trop grand corps. J'ai inséré client_max-body_size et à 10m, mais je n'ai toujours pas réussi à résoudre le problème. s'il vous plaît me dire où je l'ai fait mal 2017/09/11 23:46:40 [error] 39158#39158: *156474 client intended to send too large body: 3356812 bytes, client: 10.150.98.84, server: example.com, request: "POST /api/sensors HTTP/1.1", host: "example.com"Nginx Client_max_body_size incapable de résoudre

user nginx; 
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid; 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 
events { 
    worker_connections 1024; 
} 
http { 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 
    access_log /var/log/nginx/access.log main; 
    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    include    /etc/nginx/mime.types; 
    default_type  application/octet-stream; 
    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 
    index index.html index.htm; 
upstream nodejs { 
    server localhost:3000; 
} 
    server { 
     listen  80; 
     server_name example.com; 


location/{ 
if ($http_x_forwarded_proto != 'https') { 
      return 301 https://$server_name$request_uri; 
     } 
     try_files $uri $uri/ @nodejs; 
    } 

    location @nodejs { 
     proxy_redirect off; 
     proxy_http_version 1.1; 
     proxy_pass http://nodejs; 
     proxy_set_header Host $host ; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     client_max_body_size 10M; 
    } 
location ~ (/images|/img|/javascript|/js|/css|/stylesheets|/flash|/media|/static|robots.txt|humans.txt|favicon.ico){ 
root /var/www/app/public; 
client_max_body_size 10M; 
} 
     # redirect server error pages to the static page /40x.html 
     # 
     error_page 404 /404.html; 
      location = /40x.html { 
     } 
     # redirect server error pages to the static page /50x.html 
     # 
     error_page 500 502 503 504 /50x.html; 
      location = /50x.html { 
     } 
} 
} 
+0

Pouvez-vous essayer de l'ajouter à 'location/{' block? –

+0

J'ai une question. Donc je dois ajouter à location/{block et enlever le client_max_body_size 10M d'autres endroits ..? –

+0

Je crois que oui parce que la requête atterrit d'abord là et ensuite vérifiée à '@ nodejs', donc actuellement elle est rejetée plus tôt avant d'atteindre nodejs –

Répondre

0

Ajouter un bloc d'emplacement spécifique pour /api/sensors et augmenter la limite de même

location /api/sensors { 
    client_max_body_size 10M; 
    try_files dummy_file_not_exists @nodejs; 
} 

De cette façon, vous exposez que le point final avec un grand corps qui attend de recevoir il. Faites le tester localement avant de mettre en production.

+0

Merci. Fonctionne-t-il sans ajouter un bloc spécifique pour/api/sensors ..? Je veux dire, faut-il vraiment ajouter un bloc supplémentaire pour/api/capteurs ..? –

+0

Cela ressemble plus à une protection. Vous pouvez ajouter 'location /' et cela fonctionnera. Mais l'augmentation de votre surface d'attache où l'on peut envoyer 10 Mo tout en demandant une ressource –