Non si può usare il numero di porta nell'URL per incorporare media in un post

Per consentire ai miei utenti di ospitare video, file audio, ecc. che incorporano nei post di Discourse, ho configurato un server Apache in esecuzione accanto a Nginx che esegue Discourse. Il server Apache è in esecuzione sulla porta 8008 per http: e sulla porta 591 per https: (porte IANA riservate per http-alt). Questo funziona bene e i contenuti sul server sono accessibili dai browser specificando il numero di porta nell’URL, ad esempio:

https://scanalyst.fourmilab.ch:591/video/f9_from_drone_ship_2022-10-12.mp4

Ma se si tenta di incorporare questo URL in un post di Discourse, si verifica un errore:

Spiacenti, non siamo riusciti a generare un’anteprima per questa pagina web, perché il server ‘scanalyst.fourmilab.ch’ non è stato trovato. Al posto di un’anteprima, nel tuo post apparirà solo un link.

Se eseguo tcpdump e monitoro il traffico DNS, non vedo nulla inviato quando rifiuta questo URL. Lo rifiuta senza mai effettuare una query DNS. Se modifico il numero di porta nell’URL in 443, l’impostazione predefinita per https:, effettua normalmente la query DNS ma l’incorporamento fallisce, ovviamente, poiché il server Apache non è in ascolto su quella porta e il server Discourse non sa cosa fare con l’URL. Non ho visto nulla nella documentazione di Discourse che indichi che gli URL incorporati non possano specificare un numero di porta.

Esaminando il codice sorgente, ho trovato un test nella funzione validate_uri_format alla riga 362 di lib/final_destination.rb che recita:

    return false if @uri.scheme == 'https' && @uri.port != 443

che sembra rifiutare un URL https: che utilizza una porta diversa da 443. Questo sembrava spiegare ciò che stavo vedendo, quindi ho commentato questa riga, ma non ha fatto alcuna differenza, anche dopo aver riavviato Discourse. Quando il post appare sul sito con l’incorporamento trasformato in un link di testo, cliccando sul link di testo mostra correttamente il video, quindi l’unico problema è il mancato riconoscimento come incorporamento e l’avvolgimento del player inline attorno ad esso.

Le mie domande, a questo punto, sono:

  • I numeri di porta non standard sono destinati a funzionare sugli URL per gli incorporamenti nei post di Discourse?
  • Se sì, cosa causa il rifiuto di questi URL?
  • C’è un modo per farli funzionare?

C’è stata una discussione qui nel marzo 2017 su questo problema in questi due post:

che implicavano che il problema fosse stato risolto, ma oggi non funziona su 2.9.0.beta10.

Grazie per qualsiasi intuizione e/o assistenza in merito.

1 Mi Piace