Volete eseguire Discourse insieme ad Apache?

Ho visto alcuni tutorial che spiegano come farlo, ma in modi diversi, il che non mi aiuta. Esiste un modo per creare una configurazione di virtual host Apache per Discourse in modo che un dominio specifico reindirizzi al software, proprio come si fa per altri siti web e i rispettivi domini?

Grazie.

SĂŹ. Quei tutorial spiegano come fare.

Oppure, se intendi se puoi eseguire Discourse senza Docker e con Apache come proxy inverso, la risposta è no.

Per 5 dollari al mese puoi evitare quel problema.

Grazie per la risposta.

Lo sto eseguendo su un VPS. Ho Apache installato e non sono molto esperto di siti web. Sto guardando questo: Run other websites on the same machine as Discourse

Ma con questa soluzione sembra che debba usare Nginx a causa dei file di configurazione, quindi la mia domanda è: posso fare la stessa cosa con Apache?

Dai un’occhiata a Set up Discourse on a server with existing Apache sites

SĂŹ, stavo guardando anche quello. Ne ha parlato per CentOS e non per Ubuntu, alcune parti non mi sono chiare.

Se non ti è familiare (e non vuoi diventarlo), ti consiglio vivamente di abbandonare Apache e far girare solo Discourse sulla VPS. Se hai bisogno di eseguire altre cose, procurati una VPS per le funzionalità di Apache e un’altra per Discourse.

Quindi sono passato a Nginx e tutto funziona. Credo che SSL sia configurato correttamente, ma su Chrome ricevo il messaggio “La tua connessione a questo sito non è completamente sicura”. L’opzione Forza HTTPS è attiva.

L’SSL è configurato con il servizio nginx all’interno del container. Se il container è esposto a Internet e vi accedete direttamente dal browser (installazione predefinita di Discourse), avrete l’SSL.

Tuttavia, se mettete un proxy inverso davanti ad esso (sia esso Apache, Nginx o un servizio di terze parti come Cloudflare), dovrete assicurarvi che la connessione tra il browser e il proxy inverso sia sicura.

Quindi, nel vostro caso, dovrete generare certificati per il proxy inverso nginx (non credo sia necessario aggiungere i template SSL di Discourse, poichÊ il container non è esposto direttamente a Internet; potete farlo, ma non è obbligatorio).

Potete consultare come farlo utilizzando Let’s Encrypt (gratuito, lo stesso utilizzato nell’installazione predefinita di Discourse, ma in questo caso per nginx esterno al container).

TL;DR Il nginx che funge da proxy inverso necessita di SSL. Il nginx all’interno del container non ha bisogno di SSL (assumendo che l’accesso avvenga dalla stessa macchina).

Quindi, per garantire la sicurezza tra browser e reverse proxy, devo configurare SSL nel file di configurazione di nginx?

Grazie

Ecco la mia configurazione, cosa altro devo aggiungere?

server {
listen 80; listen [::]:80;
server_name a1rp.xyz; # ← modifica questo

return 301 https://$host$request_uri;

}

server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name a1rp.xyz; # ← modifica questo

ssl on;
ssl_certificate      /var/discourse/shared/standalone/ssl/a1rp.xyz.cer;
ssl_certificate_key  /var/discourse/shared/standalone/ssl/a1rp.xyz.key;
ssl_dhparam          /var/discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

http2_idle_timeout 5m; # aumentato da 3m, valore predefinito

location / {
    proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;
}

}

Assicurati di:

  1. Commentare tutti i template SSL in templates (in app.yml). Se stai utilizzando Let’s Encrypt, ne avrai due:
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. Aggiungere un template socket:
- "templates/web.socketed.template.yml" 
  1. Commentare tutte le porte esposte:
# - "80:80"   # http
# - "443:443" # https

(in alternativa, puoi esporre altre porte come 8080:80 e 8443:443 e, invece di utilizzare un socket nel passaggio successivo, puoi reindirizzare a un upstream che punta a localhost:80 e/o localhost:443)

  1. Hai:
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;

Penso che tu debba aggiungere : alla fine del socket:

proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
  1. Devi avere i file del certificato SSL in /var/discourse/shared/standalone/ssl/. Li hai? Presumo che tu possieda già il dominio a1rp.xyz e che tu abbia letto come generare i certificati SSL sul sito di Let’s Encrypt. Tieni inoltre presente che, nell’installazione predefinita, Discourse gestisce automaticamente il rinnovo dei certificati, ma nel tuo caso dovrai occupartene tu (ad esempio con un cronjob), altrimenti i certificati scadranno dopo 3 mesi.

Vedi:

Sì, ho tutto ciò che hai detto di fare nella configurazione dell’app (incluso il post che corregge alcune cose). Per quanto riguarda il :, non credo faccia differenza. C’era anche un post che diceva che non dovrebbe esserci un : lì. I file SSL li ho già anch’io.

Quindi ho risolto il problema. Qualcuno ha menzionato che l’icona del sito (favicon) appariva in http, ed è per questo che si verificava l’errore. Ho caricato qualcos’altro e l’ho eliminato; ora il sito è completamente https :slight_smile: