Souhaitez-vous exécuter Discourse avec Apache ?

J’ai vu plusieurs tutoriels expliquant comment faire cela, mais chacun à sa manière, ce qui ne m’aide pas. Existe-t-il un moyen de configurer un hôte virtuel Apache pour Discourse afin qu’un domaine spécifique redirige vers le logiciel, tout comme pour l’ajout d’autres sites web et de leurs domaines respectifs ?

Merci.

Oui. Ces tutoriels expliquent comment.

Ou, si vous demandez si vous pouvez exécuter Discourse sans Docker et avec Apache comme proxy inverse, la réponse est non.

Pour 5 $ par mois, vous pouvez éviter cette douleur.

Merci pour votre réponse.

Je l’exécute sur un VPS. J’ai Apache installé et je ne suis pas très expérimenté en matière de sites web. Je consulte ceci : Run other websites on the same machine as Discourse

Mais avec cela, il semble que je doive utiliser Nginx à cause des fichiers de configuration. Ma question est donc : puis-je faire la même chose avec Apache ?

Consultez Set up Discourse on a server with existing Apache sites

Oui, je regardais ça aussi. Il l’a couvert pour CentOS et non pour Ubuntu, certaines parties ne sont pas claires pour moi.

Si vous n’êtes pas familier avec cela (et que vous ne souhaitez pas le devenir), je recommande vivement d’abandonner Apache et de n’exécuter que Discourse sur le VPS. Si vous devez exécuter d’autres services, utilisez un VPS pour Apache et un autre pour Discourse.

Donc, j’ai basculé vers Nginx et tout fonctionne. Je pense que SSL est correctement configuré, mais sur Chrome, j’obtiens le message « Votre connexion à ce site n’est pas entièrement sécurisée ». L’option Force HTTPS est activée.

Le SSL est configuré avec le service nginx à l’intérieur du conteneur. Si le conteneur est exposé à Internet et que vous y accédez directement depuis un navigateur (installation Discourse par défaut), vous disposerez de SSL.

Cependant, si vous placez un proxy inverse devant celui-ci (qu’il s’agisse d’Apache, de Nginx ou d’un service tiers comme Cloudflare), vous devrez vous assurer que la connexion entre le navigateur et le proxy inverse est sécurisée.

Dans votre cas, vous devrez donc générer des certificats pour le proxy inverse nginx (je ne pense pas que vous ayez besoin d’ajouter les modèles SSL de Discourse, car le conteneur n’est pas exposé directement à Internet ; vous le pouvez, mais ce n’est pas nécessaire).

Vous pouvez consulter la documentation pour savoir comment procéder avec Let’s Encrypt (gratuit, le même que celui utilisé dans l’installation par défaut de Discourse, mais dans ce cas pour le nginx situé à l’extérieur du conteneur).

TL;DR Le nginx qui agit en tant que proxy inverse a besoin de SSL. Le nginx situé à l’intérieur du conteneur n’en a pas besoin (en supposant que vous y accédiez depuis la même machine).

Donc, pour assurer la sécurité entre le navigateur et le proxy inverse, je dois configurer SSL dans le fichier de configuration d’nginx ?

Merci

Voici ma configuration, que dois-je ajouter d’autre ?

server {
listen 80; listen [::]:80;
server_name a1rp.xyz; # ← modifiez ceci

return 301 https://$host$request_uri;

}

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

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; # augmenté par rapport au défaut de 3m

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;
}

}

Assurez-vous de :

  1. Mettre en commentaire tous les modèles SSL dans le répertoire templates (dans app.yml). Si vous utilisez Let’s Encrypt, vous en aurez deux :
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. Ajouter un modèle de socket :
- "templates/web.socketed.template.yml" 
  1. Mettre en commentaire tous les ports exposés :
# - "80:80"   # http
# - "443:443" # https

(ou vous pouvez exposer d’autres ports comme 8080:80 et 8443:443 et, au lieu d’utiliser un socket à l’étape suivante, rediriger vers un upstream pointant vers localhost:80 et/ou localhost:443)

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

Je pense que vous devez ajouter : à la fin du socket :

proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
  1. Vous devez avoir les fichiers de certificat SSL dans /var/discourse/shared/standalone/ssl/. Les avez-vous ? Je suppose que vous possédez déjà le domaine a1rp.xyz et que vous avez lu comment générer des certificats SSL sur le site de Let’s Encrypt. Gardez également à l’esprit que Discourse gère le renouvellement des certificats pour vous dans l’installation par défaut, mais dans votre cas, vous devrez le gérer vous-même (avec un cronjob, par exemple), sinon vos certificats expireront après 3 mois.

Voir :

Oui, j’ai tout ce que vous avez dit à faire dans la configuration de l’application (y compris le post après avoir corrigé certaines choses). En ce qui concerne le :, je ne pense pas que cela fasse une différence. Il y avait aussi un post indiquant qu’il ne devrait pas y avoir de : là. Les fichiers SSL, je les ai déjà.

J’ai donc résolu le problème. Quelqu’un a mentionné que la favicon s’affichait en http, ce qui a provoqué l’erreur. J’ai téléchargé autre chose puis supprimé le fichier, et maintenant le site est entièrement en https :slight_smile: