Nginx jako reverse proxy hází chybu

vencis

Nginx jako reverse proxy hází chybu
« kdy: 02. 06. 2016, 10:23:20 »
Ahoj, nainstaloval jsem Nginx 1.10 jako reverse proxy server a na backendu mam 3 aplikacni servery s Apache 2.4 s PHP 5.4

Zda se, ze vse funguje tak jak ma, jen v error logu se stale objevuje hlaska:
Kód: [Vybrat]
[warn] 19180#19180: *4104707 upstream sent more data than specified in "Content-Length" header while reading upstream, client: xxx.xxx.xxx.xxx, server: domain.tld, request: "GET /path/to/image.png HTTP/1.1", upstream: "http://10.10.10.161:80/path/to/image.png", host: "domain.tld", referrer: "https://domain.tld"
V Apache logu nic podezreleho neni.
Konfigurace domeny domain.tld v Nginxu:
Kód: [Vybrat]
server {
   listen 443 ssl;
   server_name domain.tld;

   ssl on;
   ssl_certificate         /etc/letsencrypt/live/domain.tld/fullchain.pem;
   ssl_certificate_key     /etc/letsencrypt/live/domain.tld/privkey.pem;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   ssl_session_cache shared:SSL:50m;
   ssl_session_timeout 1d;
   ssl_session_tickets off;

   # intermediate configuration. tweak to your needs.
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SH
A384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA
:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:
DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA2
56:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
   ssl_prefer_server_ciphers on;


   # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
   add_header Strict-Transport-Security max-age=15768000;

   location / {
       proxy_pass http://backend;
       proxy_http_version 1.1;
       proxy_set_header Connection "";
       proxy_redirect http:// $scheme://;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
   }
}
Konfigurace backendu:
Kód: [Vybrat]
upstream backend {
   ip_hash;
   server appserver1;
   server appserver2;
   server appserver3;
}
« Poslední změna: 02. 06. 2016, 10:38:03 od Petr Krčmář »


ttt

Re:Nginx jako reverse proxy hází chybu
« Odpověď #1 kdy: 02. 06. 2016, 10:52:23 »
Děkujeme za informaci (náznak, že chybí otázka). Pokud by tě náhodou zajímalo, proč to něco vypisuje, tak patrně při čtení upstremu upstream poslal více dat než je uvedeno v "Content-Length" hlavičce (náznak, že ta chybová hláška poměrně dobře říká, co se stalo).

vencis

Re:Nginx jako reverse proxy hází chybu
« Odpověď #2 kdy: 02. 06. 2016, 11:14:55 »
To samozrejme vim, ale zajimalo by me jak te chybove hlasce predejit ? Na apache backendu komprese obsahu zapnuta neni.

ttt

Re:Nginx jako reverse proxy hází chybu
« Odpověď #3 kdy: 02. 06. 2016, 12:00:15 »
Je potřeba zjistit, kdo ta chyba vzniká. Nginx ji zřejmě jen zaloguje. Další v řadě je apache, tam se jde kouknout, co posílá, přímým požadavkem a zkontrolovat, jestli content-length sedí. Zřejmě sedět nebude. O krok dál zjistit, jestli apache ten obrázek vzal z disku nebo pochází z php.

McFly

  • *****
  • 616
    • Zobrazit profil
    • E-mail
Re:Nginx jako reverse proxy hází chybu
« Odpověď #4 kdy: 02. 06. 2016, 12:10:31 »
Dělají to všechny upstreamy nebo jen jeden?  ;)


vencis

Re:Nginx jako reverse proxy hází chybu
« Odpověď #5 kdy: 02. 06. 2016, 14:47:59 »
Deje se to na vsech backend serverech. Primy pozadavek na nejaky resource z backendu serveru mi v prohlizeci vrati Status code 200, transferred and size souhlasi. Pri dalsim pokusu o nacteni vraci Status code 304

ttt

Re:Nginx jako reverse proxy hází chybu
« Odpověď #6 kdy: 02. 06. 2016, 16:29:43 »
Předpokládám, že jde o statický obrázek, který je někde na disku. Content-Length odpovídá velikosti souboru? Co jiný backend, např. SimpleHTTPServer*, způsobuje stejnou chybu? Pokud ano, pak půjde změnou hlavičky zjistit, jakou hodnotu nginx očekává, z toho by mohlo jít uhodnout proč. Pokud ne, pak by něco mohlo jít vykoukat z rozdílu toho, co posílá apache a python.

https://docs.python.org/2/library/simplehttpserver.html

vencis

Re:Nginx jako reverse proxy hází chybu
« Odpověď #7 kdy: 03. 06. 2016, 12:28:21 »
Ano jde o staticky obrazek z disku, velikost ulozeneho souboru odpovida Content-Length.
Zkusim nejakou starsi verzi Nginxu a nebo jako reverse proxy vyzkousim Apache

Lol Phirae

Re:Nginx jako reverse proxy hází chybu
« Odpověď #8 kdy: 03. 06. 2016, 12:36:37 »
nebo jako reverse proxy vyzkousim Apache

No, to bych teda určitě radši zkusil haproxy.

youda

Re:Nginx jako reverse proxy hází chybu
« Odpověď #9 kdy: 03. 06. 2016, 12:58:37 »
Web je plnej Content-Length related problemu nginx a reseni nezna nikdo.

Osobne bych na frontend strcil Apache s mod_proxy, je to pomalejsi ale na drtvou vetsinu pouziti postacujici