Immagini delle lettere vuote dietro proxy server

Ho avuto un problema simile qualche tempo fa - Avatar images broken behind proxy

Le immagini degli avatar delle lettere generano un errore 500 quando vengono caricate direttamente. Dall’interno del container Docker, posso fare il curl di https://avatars.discourse.org/ attraverso il nostro server proxy, così come https://avatars.discourse-cdn.com/.

Non riesco a trovare errori nei log che indichino perché sta fallendo, né in nginx né nel discourse production.log.

Hai qualche idea su dove dovrei cercare gli errori, o se c’è qualcosa di ovvio che è successo nell’ultima ~settimana di cui non sono a conoscenza?

Ho ancora questo problema. Ho analizzato un po’ il codice e, come previsto, https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png è ciò che il codice sta effettivamente richiedendo. All’interno del container Discourse, riesco a scaricare il file direttamente con wget e ottengo una PNG valida. Ad esempio: https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.pnghttps://forum.pkp.sfu.ca/48.png

In production.log, viene mostrato che l’immagine viene scaricata con successo, apparentemente:

Started GET "/presence/get?channels%5B%5D=%2Fdiscourse-presence%2Freply%2F88689&channels%5B%5D=%2Fdiscourse-presence%2Fwhisper%2F88689" for 172.17.1.79 at 2024-07-09 19:59:01 +0000
Processing by PresenceController#get as JSON
Parameters: {"channels"=>["/discourse-presence/reply/88689", "/discourse-presence/whisper/88689"]}
Processing by UserAvatarsController#show_proxy_letter as PNG
Parameters: {"version"=>"v4", "letter"=>"b", "color"=>"bcef8e", "size"=>"48"}
Completed 200 OK in 14ms (Views: 0.5ms | ActiveRecord: 0.0ms | Allocations: 3095)
Completed 418 in 9ms (Views: 0.4ms | ActiveRecord: 0.0ms | Allocations: 1680)

Quindi, per qualche motivo, continuo a ricevere un’immagine vuota. Forse non sta utilizzando HTTP_PROXY o HTTPS_PROXY o qualcosa del genere.

In site_settings.yml, si dice che l’URL predefinito per il proxy delle lettere avatar è: " /letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png " e quando faccio clic con il pulsante destro del mouse su una delle immagini per ottenere l’URL, è (correttamente?) https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png

Eseguire un curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png restituisce un errore interno del server 500.

Stranamente, sembro ricevere due richieste GET. Mi chiedo se il nostro load balancer sia configurato in modo errato.

modifica: Ok, non è il LB, la cosa delle due richieste GET era un depistaggio.

È piuttosto frustrante. Non riesco a capire perché le immagini degli avatar delle lettere restituiscano 500.

Ahhah, ho scoperto che Discourse ha una SEZIONE DI LOG PROPRIA ACCESSIBILE SOLO TRAMITE L’INTERFACCIA UTENTE WEB. /facepalm.

Questo menziona show_proxy_letter, quindi è probabilmente rilevante.

Messaggio (70085 copie segnalate)

Impossibile elaborare correttamente la risposta dirottata: EOFError: fine del file raggiunta

Backtrace

/usr/local/lib/ruby/3.3.0/net/protocol.rb:237:in `rbuf_fill'
/usr/local/lib/ruby/3.3.0/net/protocol.rb:199:in `readuntil'
/usr/local/lib/ruby/3.3.0/net/protocol.rb:209:in `readline'
/usr/local/lib/ruby/3.3.0/net/http/response.rb:158:in `read_status_line'
/usr/local/lib/ruby/3.3.0/net/http/response.rb:147:in `read_new'
/usr/local/lib/ruby/3.3.0/net/http.rb:1625:in `connect'
/var/www/discourse/lib/final_destination/http.rb:27:in `block in connect'
/var/www/discourse/lib/final_destination/http.rb:17:in `each'
/var/www/discourse/lib/final_destination/http.rb:17:in `each_with_index'
/var/www/discourse/lib/final_destination/http.rb:17:in `connect'
/usr/local/lib/ruby/3.3.0/net/http.rb:1580:in `do_start'
/usr/local/lib/ruby/3.3.0/net/http.rb:1569:in `start'
/usr/local/lib/ruby/3.3.0/net/http.rb:1029:in `start'
/var/www/discourse/lib/final_destination.rb:556:in `safe_session'
/var/www/discourse/lib/final_destination.rb:491:in `safe_get'
/var/www/discourse/lib/final_destination.rb:170:in `get'
/var/www/discourse/lib/file_helper.rb:73:in `download'
/var/www/discourse/app/controllers/user_avatars_controller.rb:176:in `proxy_avatar'
/var/www/discourse/app/controllers/user_avatars_controller.rb:54:in `block in show_proxy_letter'
/var/www/discourse/lib/hijack.rb:64:in `instance_eval'
/var/www/discourse/lib/hijack.rb:64:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.3/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:115:in `block in do_work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:109:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:97:in `block (2 levels) in start_thread'

Ho disattivato completamente gli avatar dei sistemi esterni.

1 Mi Piace