web-dev-qa-db-fra.com

En amont trop grand - nginx + codeigniter

Je reçois cette erreur de Nginx, mais je n'arrive pas à le comprendre! J'utilise codeigniter et j'utilise la base de données pour les sessions. Je me demande donc comment l'en-tête peut être trop gros. Existe-t-il de toute façon de vérifier ce qu'est l'en-tête? ou potentiellement voir ce que je peux faire pour corriger cette erreur?

Faites-moi savoir si vous avez besoin de moi pour mettre en place des fichiers de conf ou quoi que ce soit et je mettrai à jour à votre demande

2012/12/15 11:51:39 [error] 2007#0: *5778 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "jdobres.xxxxx.com", referrer: "http://jdobres.xxxx.com/"

MISE À JOUR

J'ai ajouté ce qui suit dans conf:

proxy_buffer_size   512k;
proxy_buffers   4 512k;
proxy_busy_buffers_size   512k;

Et maintenant, je reçois toujours ce qui suit:

2012/12/16 12:40:27 [error] 31235#0: *929 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "jdobres.xxxx.com", referrer: "http://jdobres.xxxx.com/"
56
Aram Papazian

Ajoutez ceci à votre http {} du fichier nginx.conf normalement situé dans / etc/nginx/nginx.conf:

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

Ensuite, ajoutez ceci à votre bloc d'emplacement php, ce sera situé dans votre fichier vhost recherchez le bloc qui commence par location ~ .php $ {

fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
126
PhearOfRayne

Modifiez votre configuration nginx et changez/définissez les directives suivantes:

    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;
8
TheHorse

utilisation de nginx + fcgiwrap + requête trop longue

J'ai eu le même problème car j'utilise une configuration nginx + fcgiwrap:

location ~ ^.*\.cgi$ {
    fastcgi_pass  unix:/var/run/fcgiwrap.sock;
    fastcgi_index index.cgi;
    fastcgi_param SCRIPT_FILENAME /opt/nginx/bugzilla/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    # attachments can be huge
    client_max_body_size 0;
    client_body_in_file_only clean;
    # this is where requests body are saved
    client_body_temp_path /opt/nginx/bugzilla/data/request_body 1 2;
}

et le client faisait une demande avec une URL d'environ 6 000 caractères (une demande de bugzilla).

débogage ...

location ~ ^.*\.cgi$ {
    error_log /var/log/nginx/bugzilla.log debug;
    # ...
}

Voici ce que j'ai obtenu dans les journaux:

2015/03/18 10:24:40 [debug] 4625#0: *2 upstream split a header line in FastCGI records
2015/03/18 10:24:40 [error] 4625#0: *2 upstream sent too big header while reading response header from upstream, client: 10....

puis-je avoir "414 request-uri too large" au lieu de "502 bad gateway"?

Oui, vous pouvez! Je lisais Comment définir la longueur d'URL autorisée pour une demande nginx (code d'erreur: 414, uri trop grand) avant parce que je pensais "hé l'URL est trop longue" mais je recevais 502 plutôt que 414.

large_client_header_buffers

Essayez # 1:

# this goes in http or server block... so outside the location block
large_client_header_buffers 4 8k;

Cela échoue, mon URL est de 6000 caractères <8k. Essayez # 2:

large_client_header_buffers 4 4k;

Maintenant, je ne vois pas de 502 Bad Gateway plus et à la place je vois un 414 Request-URI Too Large

"en amont diviser une ligne d'en-tête dans les enregistrements FastCGI"

A fait des recherches et trouvé quelque part sur Internet:

Cela me suffisait:

location ~ ^.*\.cgi$ {
    # holds request bigger than 4k but < 8k
    fastcgi_buffer_size 8k;
    # getconf PAGESIZE is 4k for me...
    fastcgi_buffers 16 4k;
    # ...
}
5
dnozay

J'ai prouvé que cela est également envoyé lorsqu'un en-tête non valide est transmis. Les caractères non valides ou la mise en forme des en-têtes HTTP, l'expiration des cookies retardée de plus d'un mois, etc. entraîneront tous: en-tête envoyé un en-tête trop grand lors de la lecture de l'en-tête de réponse en amont

5
ppostma1

J'ai rencontré ce problème dans le passé (n'utilisant pas codeigniter mais cela se produit chaque fois que les réponses contiennent beaucoup de données d'en-tête) et je me suis habitué à peaufiner les tampons comme suggéré ici, mais récemment, j'ai été de nouveau mordu par ce problème et les tampons étaient apparemment correct .

Il s'est avéré que c'était la faute de spdy que j'utilisais sur ce projet particulier et que j'ai résolu en activant la compression des en-têtes spdy comme ceci:

spdy_headers_comp 6;
4