こんにちは、皆さん。force_https オプションを有効にした際(https 化が完了したことを確認した上で)に、以下の問題が発生しています:
- 設定の変更ができない
- ログアウトできない(ログアウトをクリックしても何もしない)
- ログインできない(SSO リダイレクトがログアウト済みのホームページに誘導される)
最初は単なる偶発的な不具合か、自分が何かを壊してしまったのだと思い、アプリを削除し、すべてのデータを破棄して再構築・起動し直しました。
新しいアプリでは再びすべてが正常に動作し、バックアップからの復元、ロゴの設定、各種設定の変更(メール通知設定の変更、タイトルの調整、テーマ CSS のカスタマイズなど)ができました。SSL エラーもなく、ブランド画像も正常に読み込まれていました。
しかし、再び force_https オプションを有効にした瞬間、再びすべての 403 エラーが発生するようになりました。
今回はコンテナ内にアクセスし、CLI を使って force_https オプションを無効化しました:
/var/discourse/launcher enter app
rails c
SiteSetting.force_https = false
このオプションを無効化した瞬間、サイト上のすべての機能が再び正常に動作するようになりました。
ログ(site_url.com/logs)を確認しましたが、以下のエラー以外にはほとんど記載されていませんでした:
Error: Forbidden
Url: https://site_url.com/assets/ember_jquery-1d5617356dd43f27b8adbf60ccb854a1f5992b9b9f9e51e32ea7287fc9eeb25b.js
Line: 1
Column: 262166
Window Location: https://site_url.com/admin/plugins/chat/discord
これは以前、discourse-chat-integration プラグインの設定を変更していた際に発生したエラーです。
次にどうすればよいか見当がつかず、アドバイスをお願いできれば幸いです。
別の PHP アプリケーションと共にサーバー上で実行しているため、Nginx のプロキシパスクを使用しています。私の Nginx 設定は以下の通りです:
server {
server_name site_url;
client_max_body_size 500m;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen 443 ssl; # Certbot によって管理されています
ssl_certificate /etc/letsencrypt/live/site_url/fullchain.pem; # Certbot によって管理されています
ssl_certificate_key /etc/letsencrypt/live/site_url/privkey.pem; # Certbot によって管理されています
include /etc/letsencrypt/options-ssl-nginx.conf; # Certbot によって管理されています
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # Certbot によって管理されています
}
server {
if ($host = site_url) {
return 301 https://$host$request_uri;
} # Certbot によって管理されています
listen 80;
server_name site_url;
return 404; # Certbot によって管理されています
}
HTTPS の転送が正しく行われていないと思います。こちらで解決策を検索してください。
プロキシヘッダーの設定を完全に忘れていました。不足していたヘッダーを追加したところ、すべて正常に動作するようになりました。
ありがとうございます!
もし誰かがこの問題に直面した場合、私が不足していたプロキシパスヘッダーは以下の通りです:
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;