この方法について解説したチュートリアルをいくつか見たのですが、それぞれ手法が異なり、私には役立ちませんでした。他のウェブサイトと同様に、特定のドメインを Discourse ソフトウェアにリダイレクトさせる Apache の仮想ホスト設定を作成する方法はありますか?
ありがとうございます。
この方法について解説したチュートリアルをいくつか見たのですが、それぞれ手法が異なり、私には役立ちませんでした。他のウェブサイトと同様に、特定のドメインを Discourse ソフトウェアにリダイレクトさせる Apache の仮想ホスト設定を作成する方法はありますか?
ありがとうございます。
はい。そのチュートリアルで手順が説明されています。
あるいは、Docker を使わず、Apache をリバースプロキシとして使用して Discourse を実行できるかどうかという意味であれば、答えは「いいえ」です。
月額 5 ドルで、その手間を回避できます。
返信ありがとうございます。
VPS で実行しています。Apache をインストールしており、Web サイトについてはあまり経験がありません。こちらを見ています:Run other websites on the same machine as Discourse
しかし、それによると設定ファイルの関係で Nginx を使用する必要があるようですが、Apache でも同じことが可能でしょうか?
ああ、僕もそれを見てました。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;
}
}
以下の点を確認してください:
templates(app.yml 内)にあるすべての SSL テンプレートをコメントアウトしてください。Let’s Encrypt を使用している場合は、以下の 2 つが存在します:# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.socketed.template.yml"
# - "80:80" # http
# - "443:443" # https
(または、8080:80 や 8443:443 などの他のポートを公開し、次のステップでソケットを使用する代わりに、localhost:80 および/または localhost:443 を指すアップストリームにリダイレクトすることも可能です)
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
ソケットの末尾にコロン : を追加する必要があると思います:
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
/var/discourse/shared/standalone/ssl/ に存在している必要があります。それらはありますか?ドメイン a1rp.xyz をすでに所有しており、Let’s Encrypt のサイトから SSL 証明書の生成方法について読んでいると想定しています。また、デフォルトのインストールでは Discourse が証明書の更新を自動で行いますが、今回のケースでは手動で更新を行う必要があります(例えば cron ジョブを使用するなど)。そうしないと、証明書は 3 ヶ月後に期限切れになります。参照:
はい、アプリ設定にはおっしゃったすべての手順(一部の修正を含む)が含まれています。コロン(:)については、違いはないと思います。そこにコロン shouldn’t があるべきではないという投稿もありました。SSL ファイルもすでに持っています。
問題が解決しました。http でファビコンが表示されていることがエラーの原因だと指摘されました。別のものをアップロードして削除したところ、サイトが完全に https になりました ![]()