Imagens de cartas em branco atrás de proxy server

Tive um problema semelhante há um tempo - Avatar images broken behind proxy

As imagens de avatar de letras estão gerando um erro 500 ao serem carregadas diretamente. De dentro do contêiner Docker, posso usar o curl em https://avatars.discourse.org/ através do nosso servidor proxy, bem como em https://avatars.discourse-cdn.com/.

Não consigo encontrar nenhum erro nos logs que indique por que está falhando, seja no nginx ou no discourse production.log.

Alguma ideia de onde devo procurar erros, ou se há algo óbvio que aconteceu na última semana que eu não saiba?

Ainda estou com este problema. Analisei um pouco o código e, como eu esperava, https://avatars.discourse-cdn.com/#{params[:version]}/letter/#{params[:letter]}/#{params[:color]}/#{params[:size]}.png é o que o código está realmente solicitando. Dentro do contêiner do Discourse, consigo baixar o arquivo diretamente com wget e obter um PNG válido. Por exemplo: https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/48.pnghttps://forum.pkp.sfu.ca/48.png

No production.log, ele mostra que a imagem foi baixada com sucesso, supostamente:

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)

Portanto, por algum motivo, ainda estou recebendo uma imagem em branco. Talvez não esteja usando HTTP_PROXY ou HTTPS_PROXY ou algo assim.

Em site_settings.yml, diz que a URL padrão do letter_avatar_proxy é: " /letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png" e quando clico com o botão direito em uma das imagens para obter a URL, ela é (corretamente?) https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/b/bcef8e/48.png

Fazer um curl -I https://forum.pkp.sfu.ca/letter_avatar_proxy/v4/letter/r/4491bb/48.png retorna um erro interno do servidor 500.

Estranhamente, pareço receber duas requisições GET. Pergunto-me se o nosso balanceador de carga está mal configurado.

editar: Ok, não é o LB, a coisa das duas requisições GET foi uma pista falsa.

Isso é bastante frustrante. Não consigo entender por que as imagens de avatar de letras estão retornando 500.

Ahhah, descobri que o Discourse tem sua PRÓPRIA SEÇÃO DE LOG ACESSÍVEL APENAS VIA INTERFACE DE USUÁRIO WEB. /facepalm.

Isso menciona show_proxy_letter, então provavelmente é relevante.

Message (70085 copies reported)

Failed to process hijacked response correctly : EOFError : end of file reached

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'

Desativei completamente os avatares de sistemas externos.

1 curtida