Portál AbcLinuxu, 12. května 2025 11:30

Dotaz: Apache zobrazuje obrázky jen na localhostu.

5.11.2019 16:57 Petr_70 | skóre: 8
Apache zobrazuje obrázky jen na localhostu.
Přečteno: 581×
Odpovědět | Admin
Dobrý den všem.

Prosím vás všechny, kteří se vyznají a mají zkušenosti s konfigurací webserveru na linuxovém serveru.

Na PC s veřejnou IP adresou a systémem OpenSuse Leap 15.2 jsem zprovoznil Apache web server, jehož jediným úkolem je zobrazovat na dálku grafy s naměřenými daty. V podstatě se nejedná o nic jiného, než soubor *.jpg (nebo *.png), který je cyklicky přepisován. Zde je kámen úrazu, protože s vyjímkou hostujícího stroje nelze načíst vůbec obrázky - webserver funguje, zobrazí psaný text avšak na místě obrázků je stále jen malý čtvereček s křížkem.. :(

Zkoušel jsem všechno možné a troufám si tvrdit, že mohu vyloučit chyby s oprávněním k přístupu k souborům, chyby v zápisu cesty k obrázkům (viz dále) a stále nic. :(

Jak jsem již uvedl na stroji se systémem a webserverem Apache funguje vše bezvadně - vzdáleně nikoli.
V rootu webserveru v index.html mám obrázky zadány takhle:
img src="http://localhost/image.jpg" />
popřípadě:
img src="http://moje_veřejná_ip/image.jpg" />

(na začátku chybí ostrá závorka u tagu "img" ale ten tu není povolen.)

Ani v logu Apache acces_log, error_log jsem bohužel nenalezl nic, co by vedlo k odhalení problému.

Nesetkal jste se někdo s tímto nebo nemáte prosím někdo tip, kde by mohl být problém? Už se s tím trápím docela dlouho..

Děkuji za každou pomoc či radu.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

MMMMMMMMM avatar 5.11.2019 17:15 MMMMMMMMM | skóre: 44 | blog: unstable | Valašsko :-)
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
zkusil bych
<img src="image.jpg" />
Linux Dokumentační Projekt - PDF ke stažení
5.11.2019 17:34 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Děkuji ale stále nic...

V chybném zadání cesty bych chybu opravdu nehledal. Kde je problém skutečně netuším...
5.11.2019 19:32 _radek | skóre: 19
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Já bych doporučoval právě tam hledat.

Píšete, že wget http://moje_veřejná_ip/image.jpg funguje.

Logicky s odkazem img src="http://localhost/image.jpg" to fungovat nemůže jinde, něž na hostujícím stroji. Localhost je totiž ten počítač ze kterého se snažíte na obrázek podívat a prohlížeč se ho snaží z této adresy načíst -tedy z lokálního stroje, kde určitě není, ani Apache ani obrázek :-)
5.11.2019 19:39 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Jasně, už blbnu. :)

Ale i když tam zadám natvrdo veřejnou IP nebo to zadám relativně, tak to prostě odjinud nefunguje.
5.11.2019 19:49 _radek | skóre: 19
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Nemám tušení jak teď vaš kod v index.html vypadá - možná, že teď je čas zkusit vymazat cache prohlížeče - může vám nutit stále stejnou starou verzi - bůh ví.

Když do adresního řádku zadáte odkaz přímo na obrázek - tedy http://moje_veřejná_ip/image.jpg funguje na ostatních strojích?
6.11.2019 06:12 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
To právěže nefunguje - stejně jako v dokumentu se načte jen ten prázdný čtverec.

V index.html nemám nic zvláštního.

5.11.2019 17:45 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použijte vývojové nástroje prohlížeče F12, v panelu Síť zjistěte, zda se prohlížeč pokoušel načíst obrázek a jakou dostal odpověď od serveru. Porovnejte funkční a nefunkční adresu. Podle toho problém řešte dál.
-- OldFrog
5.11.2019 18:27 NN
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Stacil by i vystup wget http://moje_veřejná_ip/image.jpg
5.11.2019 19:10 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
wget http://moje_veřejná_ip/image.jpg funguje.
Jendа avatar 6.11.2019 08:21 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
I z venku? Protože mně to z ničeho nic po přenesení hlaviček zavře spojení (dostanu TCP paket s PSH s hlavičkama a pak FIN).
Řešení 1× (MMMMMMMMM)
Jendа avatar 6.11.2019 08:25 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Zagooglil jsem tu chybu co řekl wget a našel jsem tohle. Prej ethtool -K eth0 tx-scatter-gather on (netuším co to dělá), vypnout EnableSendfile v Apachi a je tam bugreport který se mi nechce načíst.
6.11.2019 10:21 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Příteli tys génius - trefil jsi to!! :)
Přídal jsem na konec httpd.conf direktivu "EnableSendfile off" a voila! obrázky jsou tam!

Děkuji ti mnohokráte! Opravdu jsi mi moc pomohl.

A samozřejmě i vám všem ostatním za snahu.


btw: možná by nebylo od věci tohle někde zveřejnit - myslím, že hlavně těm, kdož se snaží rozchodit Apache bez zkušeností, může tohle ušetřit dost času...
6.11.2019 10:37 NN
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Jenze direktiva 'EnableSendfile' je podle dokumentace ve vychozim nastaveni vypnuta, takze pricnu problemu bych hledal jinde. Mozna by pomohlo proghledat konfiguraci a kod stranek a najit zdroj:
find /etc/apache2/ -type f | xargs grep 'EnableSendfile'
find /var/www/ -type f | xargs grep 'EnableSendfile'
6.11.2019 11:12 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Ano, je zapnutá v server-tuning.conf. Ale musí tam být defaultně, protože jsem ráno instaloval celý Apache znova.
Tak nevím...
linux-x7v9:/etc/apache2 # find /etc/apache2/ -type f | xargs grep 'EnableSendfile'
/etc/apache2/httpd.conf:EnableSendfile off
/etc/apache2/server-tuning.conf:# EnableSendfile: Control whether the sendfile kernel support is
/etc/apache2/server-tuning.conf:EnableSendfile on
6.11.2019 11:21 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Teď jsem se ještě díval do server-tuning.conf a z výpisu před direktivou je zřejmé, že je defaultně zapnutá:
# EnableSendfile: Control whether the sendfile kernel support is
# used to deliver files (assuming that the OS supports it).
# The default is on; turn this off if you serve from NFS-mounted
# filesystems. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#enablesendfile
6.11.2019 12:23 NN
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Jenze soubor server-tuning.conf si vyrobil OpenSUSE sam.. k tomu asi neni co dodat.
Jendа avatar 6.11.2019 15:29 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
takze pricnu problemu bych hledal jinde
Tak příčina problému je bug, asi v kernelu, který způsobuje, že někdy nefunguje sendfile, ne?
5.11.2019 19:03 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Snažil jsem se postupovat dle vaší rady a vzal jsem si pro srovnání načtení jiného obrázku někde z webu.

Rozdíl jsem našel v tom, že u vzorového obrázku je pod záložkou "přijato" 100 kB, zatímco u mého pouze 275 B.

V podrobnostech je pak dále podobnost v položce "záhlaví odpovědi", ale pod záložkou "text odpovědi" je u mne hláška o neexistující datech k zobrazení.

Dále jsem ještě našel u mého nefunkčního obrázku pod "Záhlaví žádosti" položku: "Chache-control: no-cache".

Cesty jsou zdá se v pořádku... nemůže být někde v configu Apache třeba limit na velikost souboru nebo tak něco?
5.11.2019 19:08 debian+
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
5.11.2019 19:19 Lazar
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Zkuste vymazat cache prohlizece, pripadne pouzit jiny prohlizec. Pripadne do adresare umistit k index.html jeste jiny .jpg.
5.11.2019 19:32 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Tohle vše už mám vyzkoušeno. Obrázky to nebere v IE, ve Firefoxu ani v Opeře.. :(
5.11.2019 18:18 PetebLazar
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proč je URL obrázku v img src absolutní? Pokud obrázek leží v adresáři u index.html není to snad nutné? S jakým kódem končí requesty v "access_logu" (pro index.hmtl i image.jpg)?
5.11.2019 19:29 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Ano, máte pravdu - není to nutné. To tam zůstalo po všemožných experimentech se zadáváním cest. Tam ale problém stejně není...
V logu je přesně tohle (i s konkrétními IP):
158.194.76.102 - - [05/Nov/2019:19:15:39 +0100] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
158.194.76.102 - - [05/Nov/2019:19:15:39 +0100] "GET /image.png HTTP/1.1" 200 330672 "http://158.194.85.210/" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
5.11.2019 19:53 PetebLazar
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Ten image.png vypadá, že prošel úspěšně. Kód 200.
Jendа avatar 6.11.2019 08:17 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
/tmp> wget -SO - http://158.194.85.210/image.png
--2019-11-06 08:15:19--  http://158.194.85.210/image.png
Connecting to 158.194.85.210:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Date: Wed, 06 Nov 2019 08:14:59 GMT
  Server: Apache
  Last-Modified: Fri, 13 Apr 2018 15:31:27 GMT
  ETag: "50bb0-569bc90c2b1c0"
  Accept-Ranges: bytes
  Content-Length: 330672
  Keep-Alive: timeout=15, max=100
  Connection: Keep-Alive
  Content-Type: image/png
Length: 330672 (323K) [image/png]
Saving to: ‘STDOUT’

-                                         0%[                                                                             ]       0  --.-KB/s    in 0s      

2019-11-06 08:15:19 (0,00 B/s) - Connection closed at byte 0. Retrying.
Pokud ty vidíš v logu opravdu že se data přenesla, začal bych podezřívat síť, že někdo cestou do spojení zasahuje (nějaká proxy/IDS u ISP…). Nahrál bych (wireshark, tcpdump) síťový provoz na obou stranách a porovnal.
MMMMMMMMM avatar 6.11.2019 16:12 MMMMMMMMM | skóre: 44 | blog: unstable | Valašsko :-)
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
vidím, že to tazatel již vyřešil, viz http://158.194.85.210/ :-)
7.11.2019 16:19 Petr_70 | skóre: 8
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.

Direktiva "EnableSendfile off" (viz výše).

5.11.2019 19:23 debian+
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
V URL nedefuj server/protokol, pokial nemusis. Tj pis.:
<img src="//image.jpg">
6.11.2019 07:36 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: Apache zobrazuje obrázky jen na localhostu.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemáš tam náhodou soubor .htaccess a v něm nejakou krpu?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.