強制HTTPS、プロキシ、招待に関する問題

私の Discourse インスタンスはプロキシの背後にあります:

server {
    server_name forum.[...];

    location / {
        proxy_pass http://IP_ADDRESS;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;

    }

    client_max_body_size 10m;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/forum.[...]/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/forum.[...]/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = forum.[...]) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name forum.smbcn.org;

    listen 80;
    return 404; # managed by Certbot

}

これは、Discourse がインストールされているサーバー(標準の Docker インストール)につながっています:

server {
        listen 80; listen [::]:80;
        server_name forum.[...];

        client_max_body_size 10m;

        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 $scheme;
                proxy_set_header X-Real-IP $remote_addr;
        }
}

HTTPS を強制すると、招待されたユーザーは登録に進むことができません。ブラウザのログには 403 エラー(不正な CSRF)が表示されますが、CSRF トークンは正常に生成されています。HTTPS を強制しない場合は、招待は問題なく機能します。

おそらく、HTTPS 要求を HTTP にプロキシする方法に問題があり、何らかのヘッダーが不足しているのかもしれません。

「いいね!」 1

どうやら何か重要な要素を見落としているようです。HTTPS を強制できないため、ロゴが表示されません(現時点では深刻ではありません)。今日、Sidekiq でタスクを削除しようとした際に CSRF 関連のエラー(“forbidden”)が発生していることも新たに発見しました。/var/discourse/shared/standalone/log/rails/unicorn.stderr.log には以下のようなログが残っていました:

WARN – : attack prevented by Rack::Protection::HttpOrigin

非常に困っています。ご助言をいただけますと幸いです。

「いいね!」 1

もしかすると、フロントプロキシで HTTPS を有効にし、Discourse では無効にする必要があるかもしれません。

@hawm 現在の設定はこれだと思います。

$scheme 変数はどのように設定されていますか?

「いいね!」 3

私は設定していません。おそらくデフォルト値に依存しているのだと思いますが、これは間違っていますか?

プロキシを使用中の場合、問題が発生する可能性があります。私の経験上、これがご説明いただいている問題の最も一般的な原因です。代わりに「https」に設定してみてください(変数をスキップして、直接「https」と入力するだけでも構いません)。

「いいね!」 2

@michaeld はい!完璧です!本当にありがとうございます!

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.