Discourse を Apache と併せて実行したい

この方法について解説したチュートリアルをいくつか見たのですが、それぞれ手法が異なり、私には役立ちませんでした。他のウェブサイトと同様に、特定のドメインを Discourse ソフトウェアにリダイレクトさせる Apache の仮想ホスト設定を作成する方法はありますか?

ありがとうございます。

はい。そのチュートリアルで手順が説明されています。

あるいは、Docker を使わず、Apache をリバースプロキシとして使用して Discourse を実行できるかどうかという意味であれば、答えは「いいえ」です。

月額 5 ドルで、その手間を回避できます。

返信ありがとうございます。

VPS で実行しています。Apache をインストールしており、Web サイトについてはあまり経験がありません。こちらを見ています:Run other websites on the same machine as Discourse

しかし、それによると設定ファイルの関係で Nginx を使用する必要があるようですが、Apache でも同じことが可能でしょうか?

Set up Discourse on a server with existing Apache sites をご覧ください。

ああ、僕もそれを見てました。CentOS用にはカバーされていますが、Ubuntu用ではなく、いくつかの部分が僕には不明です

もしこれに慣れていない(そして慣れたいとも思っていない)のであれば、Apache をやめて、VPS 上で Discourse だけを動かすことを強くお勧めします。他のサービスも動かす必要がある場合は、Apache 用の VPS と Discourse 用の VPS を別々に用意してください。

Nginxに切り替えたところ、すべて正常に動作しています。SSLの設定は適切だと思われますが、Chromeでは「このサイトへの接続は完全に安全ではありません」というメッセージが表示されます。HTTP強制はオンになっています。

SSL はコンテナ内の nginx サービスで設定されています。コンテナがインターネットに公開され、ブラウザから直接アクセスする場合(デフォルトの Discourse インストール)、SSL が機能します。

ただし、その前にリバースプロキシ(Apache、Nginx、または Cloudflare などのサードパーティサービス)を配置する場合は、ブラウザとリバースプロキシ間の接続を安全に保つ必要があります。

したがって、このケースでは nginx リバースプロキシ用の証明書を生成する必要があります(コンテナが直接インターネットに公開されていないため、Discourse の SSL テンプレートを追加する必要はないと思いますが、追加しても構いません)。

その方法については、Let’s Encrypt をご参照ください(無料、デフォルトの Discourse インストールで使われているものと同じですが、今回はコンテナ外の nginx 用です)。

要約 リバースプロキシとして機能する nginx には SSL が必要です。コンテナ内の nginx には SSL は不要です(同じマシンからアクセスする場合)。

ブラウザとリバースプロキシ間のセキュリティを確保するには、nginx 設定ファイルで SSL を設定する必要がありますか?

ありがとうございます

これが私の設定ファイルです。他に追加すべきものは何でしょうか?

server {
listen 80; listen [::]:80;
server_name a1rp.xyz; # ← これを変更してください

return 301 https://$host$request_uri;

}

server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name a1rp.xyz; # ← これを変更してください

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; # デフォルトの 3m から 5m に引き上げ

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

}

以下の点を確認してください:

  1. templatesapp.yml 内)にあるすべての SSL テンプレートをコメントアウトしてください。Let’s Encrypt を使用している場合は、以下の 2 つが存在します:
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  1. ソケットテンプレートを追加してください:
- "templates/web.socketed.template.yml" 
  1. 公開されているすべてのポートをコメントアウトしてください:
# - "80:80"   # http
# - "443:443" # https

(または、8080:808443:443 などの他のポートを公開し、次のステップでソケットを使用する代わりに、localhost:80 および/または localhost:443 を指すアップストリームにリダイレクトすることも可能です)

  1. 以下が設定されている必要があります:
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;

ソケットの末尾にコロン : を追加する必要があると思います:

proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
  1. SSL 証明書ファイルは /var/discourse/shared/standalone/ssl/ に存在している必要があります。それらはありますか?ドメイン a1rp.xyz をすでに所有しており、Let’s Encrypt のサイトから SSL 証明書の生成方法について読んでいると想定しています。また、デフォルトのインストールでは Discourse が証明書の更新を自動で行いますが、今回のケースでは手動で更新を行う必要があります(例えば cron ジョブを使用するなど)。そうしないと、証明書は 3 ヶ月後に期限切れになります。

参照:

はい、アプリ設定にはおっしゃったすべての手順(一部の修正を含む)が含まれています。コロン(:)については、違いはないと思います。そこにコロン shouldn’t があるべきではないという投稿もありました。SSL ファイルもすでに持っています。

問題が解決しました。http でファビコンが表示されていることがエラーの原因だと指摘されました。別のものをアップロードして削除したところ、サイトが完全に https になりました :slight_smile: