Discourse: Errore Nginx doppio: Impossibile trovare il modulo `handlebars` importato da `discourse-common/lib/raw-handlebars`

Ciao!
Il mio sito web utilizza la versione 2.9 di Discourse. Per qualche motivo, ho dovuto utilizzare un doppio nginx per Discourse. Ho distribuito due nodi container web_only di Discourse e ho utilizzato un nginx per fare da proxy di fronte ad essi. Il mio diagramma dell’architettura di sistema:

Ero confuso quando il mio proxy nginx personalizzato, che gestiva due nodi container web_only e distribuiva casualmente le richieste a qualsiasi nodo web_only, a volte riportava errori sul mio sito Discourse: Impossibile trovare il modulo ‘handlebars’ importato da ‘discourse-common/lib/raw-handlebars’, questa volta il browser visita il sito con una schermata bianca. Ma quando ho utilizzato un nginx personalizzato per inoltrare tutte le richieste a uno solo dei nodi web_only, questo errore non si verifica. Ho cercato questo problema, c’erano alcuni commit in precedenza per risolvere questo stesso errore, ho confermato che la mia versione contiene il codice di quei commit.

Could not find module 'handlebars' imported from 'discourse-common/lib/raw-handlebars'

Broken instance after updating to 2.9.0.beta2 - #11 by david

Qualcuno sa perché succede? Grazie mille

A proposito, condividi un problema in cui l’uso di doppio nginx causa l’impossibilità di ottenere l’indirizzo IP reale dell’utente.
Questo perché il mio nginx personalizzato abilita il campo header X-Forwarded-For per ottenere l’indirizzo IP del client, ma non disabilita X-Forwarded-For di nginx di discourse. Causa la sovrascrittura della configurazione X-Forwarded-For di nginx personalizzato da parte di nginx di discourse.

E non importa quale usi? E stanno eseguendo la stessa immagine? Questo è sconcertante.

L’unico vantaggio che vedo nell’eseguire due container in quel modo sullo stesso host è renderlo possibile per aggiornamenti a zero downtime. Dato che non aggiorni molto spesso, sembra che tu abbia una complessità non necessaria.

Hai bisogno di qualcosa di simile nel tuo web_only.yml:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Grazie mille per la tua risposta.

Sì, non importa quale uso. Stanno eseguendo la stessa immagine web_only. Continuerò a cercare problemi usando la modalità sicura e se ci saranno conclusioni, riferirò qui.

Mi scuso per l’incomprensione nel mio diagramma di architettura di sistema, ho usato una macchina diversa per distribuire web_only. Il motivo per cui uso il doppio web_only è che il mio container web_only una volta è andato in crash a causa di troppe connessioni, ma all’epoca non ne ho trovato il motivo. Quindi ho provato a usare il doppio web_only per evitare di nuovo lo stesso problema.

Grazie, questo mi ha aiutato a risolvere il problema di ottenere l’IP dell’utente reale.

1 Mi Piace

Ha senso.

C’è un’impostazione per aumentare il numero di connessioni.

Aggiornerei. Ci dovrebbero essere alcuni problemi in quella versione e sono abbastanza sicuro che diversi problemi di sicurezza siano stati risolti da allora.

1 Mi Piace

Grazie. Al momento, ricevo ancora lo stesso errore quando provo a eseguire il debug in modalità provvisoria. Sarò pronto a provare l’aggiornamento del mio discourse per vedere se funziona.

1 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.