Fórum Root.cz
Hlavní témata => Server => Téma založeno: vencis 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:
[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:
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:
upstream backend {
ip_hash;
server appserver1;
server appserver2;
server appserver3;
}
-
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).
-
To samozrejme vim, ale zajimalo by me jak te chybove hlasce predejit ? Na apache backendu komprese obsahu zapnuta neni.
-
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.
-
Dělají to všechny upstreamy nebo jen jeden? ;)
-
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
-
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
-
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
-
nebo jako reverse proxy vyzkousim Apache
No, to bych teda určitě radši zkusil haproxy.
-
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