HTTPS funziona perfettamente, ma l'URL HTTP mostra la pagina di benvenuto di NGINX e non effettua il redirect

Ho recentemente installato Discourse su un VPS Ubuntu Focal Fossa e funziona benissimo, ma sto faticando a risolvere alcune stranezze relative agli URL.

Di seguito il comportamento che osservo (in Safari). Ho creato record A con nome @, WWW e * presso il mio registrar.

example.com [visualizza la pagina "Welcome to nginx!"] FALLITO
www.example.com [reindirizza a https://example.com] PASSATO
http://example.com [visualizza la pagina "Welcome to nginx!"] FALLITO
http://www.example.com [reindirizza a https://example.com e funziona correttamente] PASSATO
https://example.com [funziona come previsto, senza reindirizzamenti] PASSATO
https://www.example.com [errore con il messaggio del browser "Questa connessione non è privata"] FALLITO

Vorrei che la mia installazione fosse alla radice/apice, quindi durante la configurazione ho inserito example.com.

Qualsiasi consiglio sarà gradito!

Stai eseguendo un nginx esterno sul server Discourse? Perché?

Discourse include già un nginx preconfigurato che gestirà questo, a patto che gli consenta di ascoltare le porte 80 e 443.

1 Mi Piace

Ciao @Falco, grazie per la tua risposta. Per quanto ne sappia, no; l’immagine fornita dal provider VPS si chiama semplicemente “Focal Fossa Clean OS”, il che presumibilmente significa che non include strumenti di terze parti.

Si tratta di un’installazione standard, seguendo la procedura “30 minuti” pubblicata.

sudo su

wget -qO- https://get.docker.com/ | sh

git clone https://github.com/discourse/discourse_docker.git /var/discourse

cd /var/discourse

./discourse-setup
1 Mi Piace

Ohh, allora è un comportamento davvero strano!

Puoi condividere qui il tuo app.yml (rimuovi i dati sensibili come le password). Il file si trova in /var/discourse/containers/app.yml.

Anche l’output di docker ps -a.

Certamente, grazie. Il fatto che il mio dominio abbia un TLD strano potrebbe causare problemi? (è un .community).

## questo è il template Docker standalone all-in-one per Discourse
##
## Dopo aver apportato modifiche a questo file, DEVI eseguire il rebuild
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NEGLI SPAZI O NELL'ALLINEAMENTO!
## visita http://www.yamllint.com/ per validare questo file quando necessario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Scommenta queste due righe se desideri aggiungere Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP dovrebbe esporre questo container?
## Se desideri che Discourse condivida una porta con un altro server web come Apache o nginx,
## consulta https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers al massimo al 25% della memoria totale.
  ## verrà impostato automaticamente dal bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
  db_shared_buffers: "768MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git dovrebbe utilizzare questo container? (predefinito: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Quante richieste web concorrenti sono supportate? Dipende dalla memoria e dai core CPU.
  ## verrà impostato automaticamente dal bootstrap in base alle CPU rilevate, oppure puoi sovrascriverlo
  UNICORN_WORKERS: 8

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un indirizzo IP nudo.
  DISCOURSE_HOSTNAME: example.com

  ## Scommenta se vuoi che il container venga avviato con lo stesso
  ## hostname (opzione -h) specificato sopra (predefinito "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che verranno rese amministratori e sviluppatori
  ## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'email@gmail.com'

  ## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche
  ## INDIRIZZO SMTP, nome utente e password sono obbligatori
  ## ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
  DISCOURSE_SMTP_ADDRESS: smtp.postmarkapp.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username
  DISCOURSE_SMTP_PASSWORD: "password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, predefinito true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (richiesto da alcuni provider)

  ## Se hai aggiunto il template Lets Encrypt, scommenta qui sotto per ottenere un certificato SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: email@gmail.com


  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il recupero)
  ## consulta https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La chiave IP Maxmind per la ricerca geolocalizzazione
  ## consulta https://meta.discourse.org/t/-/137387/23 per i dettagli
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Il container Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## consulta https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
  - exec: echo "Inizio dei comandi personalizzati"
  ## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, scommenta e modifica:
  ## Dopo aver ricevuto la prima email di iscrizione, rimetti il commento sulla riga. Deve essere eseguito solo una volta.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fine dei comandi personalizzati"

e

CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                      NAMES
465fbf1c3fb8   local_discourse/app   "/sbin/boot"   47 minuti fa     In esecuzione da 46 minuti   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

Forse questa distribuzione che il tuo provider ti ha fornito viene fornita con nginx preinstallato?

Cosa stampa curl -I localhost?

HTTP/1.1 301 Spostato Permanentemente
Server : nginx/1.18.0
Data : lun, 25 gen 2021 20:18:00 GMT
Content-Type : text/html
Content-Length : 169
Connection : keep-alive
Location : https://example.com

Questo significa che era già installato? (scusa, sono un n00b in materia)

Questa è esattamente la risposta attesa quando funziona. Quindi, http://example.com mostra ancora la pagina di benvenuto di nginx?

https://example.com funziona perfettamente, ma http://example.com (HTTP) reindirizza alla pagina Benvenuti in nginx! :sob:

Puoi condividere il dominio effettivo?

Allora, questo non mi mostra affatto la pagina di benvenuto di nginx.

Puoi provarlo su un altro dispositivo, come il tuo telefono?

curl -I example.com -L
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Mon, 25 Jan 2021 20:35:21 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://example.com/

HTTP/2 200 
server: nginx
date: Mon, 25 Jan 2021 20:35:22 GMT
content-type: text/html; charset=utf-8
vary: Accept-Encoding
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
x-download-options: noopen
x-permitted-cross-domain-policies: none
referrer-policy: strict-origin-when-cross-origin
x-discourse-route: finish_installation/index
cache-control: no-cache, no-store
content-security-policy: base-uri 'none'; object-src 'none'; script-src https://example.com/logs/ https://example.com/sidekiq/ https://example.com/mini-profiler-resources/ https://example.com/assets/ https://example.com/brotli_asset/ https://example.com/extra-locales/ https://example.com/highlight-js/ https://example.com/javascripts/ https://example.com/plugins/ https://example.com/theme-javascripts/ https://example.com/svg-sprite/; worker-src 'self' https://example.com/assets/ https://example.com/brotli_asset/ https://example.com/javascripts/ https://example.com/plugins/
x-request-id: 8755d4fa-387f-4509-8709-b6075f274d09
x-runtime: 0.026020
strict-transport-security: max-age=31536000
1 Mi Piace

Ok, beh, sono chiaramente un idiota. Ho provato dal mio telefono tramite 4G (per verificare il DNS locale), tutti quegli URL funzionavano perfettamente. Mi sono riconnesso al WiFi e tutto funziona bene. Quindi ho poi cancellato la cache di Safari sul desktop e boom… tutto funziona anche lì.

Deve essere stato da quando ho testato inizialmente l’host e la cache non è stata svuotata da allora. Grazie mille per il tuo aiuto nel risolvere il problema e scusa per averti fatto perdere tempo.

2 Mi Piace

fwiw ho appena riscontrato lo stesso problema oggi con Ubuntu 22.04. La cancellazione della cache di Safari e l’aggiornamento hanno risolto il problema.