スプラッシュ画面がハードリフレッシュまでスタックしたまま

時々、私が管理しているフォーラムで、ロードし続けるスプラッシュ画面が表示されることがあります。

再構築後や、しばらくフォーラムにアクセスしていない場合に発生するようです。ブラウザやフォーラムプラグインの違いとは関連がないようです。また、一部の人には発生しますが、他の人には発生しないようです。

ハードリフレッシュ(WindowsではCtrl-F5、MacではCmd-Shift-R)で毎回修正されるようです。CDNのキャッシュの問題ではないかと推測していますが、確信はありません。他にこのような経験をした人はいますか?

ページがロードされていない時のコンソール

ハードリフレッシュ後のコンソール

「いいね!」 3

これらのエラーはすべて、リクエストがレート制限されたために発生しています。アセットが読み込めないと、Discourse は実行できません。

以下を確認してください。

  • 正しいエンドユーザー IP アドレスがバックエンドに渡されていますか?
  • レート制限は正しく設定されていますか?(全般的に)
  • ここでレート制限を実行しているエンティティは何ですか?
「いいね!」 4

このサーバーには、ユーザーのトラフィックをすべて1つのIPアドレスの背後に隠すようなリバースプロキシはありません。Discourse内のレート制限はデフォルト値です。

CDNが何らかのプロキシを行っている可能性はありますか?エンドユーザーのIPがバックエンドに渡されていることを確認する推奨の方法はありますか?ログにリクエストが多すぎることに関する情報は何も見つかりません。

これは文字通りCDNの仕事なので、はい、リクエストチェーンを通じて正しいエンドユーザーIPが維持されていることを確認する必要があります。

それができておらず、CDNからのすべてのリクエストがエンドユーザーではなくCDN POPのリクエストレート制限に対してカウントされていると推測します。

image

ここでCDNが429を返しているのがわかりますが、このエラーを返しているのがプロキシなのか実際のサーバーなのかを判断するには、特定のセットアップを調査する必要があります。

「いいね!」 3

問題となっているCDNはKeyCDNです。OriginShieldを有効にし、app.ymltemplate.ymlcloudflare.template.ymlのスタイル)を追加しようとしましたが、それでも429エラーが発生していました。

これ以上いじくり回すのではなく、BunnyCDNに切り替えたところ、そちらの方がうまく機能しているようです。

参考までに、テンプレートファイルを以下に示します。

keycdn.template.yml
run:
  - file:
      path: /tmp/add-keycdn-ips
      chmod: +x
      contents: |
        #!/bin/bash -e
        # keycdnのIPを追加
        curl -s 'https://www.keycdn.com/shield-prefixes.json' | \
          python3 -c "import sys, json; print('\n'.join(json.load(sys.stdin)['prefixes']))" > /tmp/keycdn-ips

        # nginxコマンドに変換し、sedのappendコマンドに含めるためにエスケープする
        CONTENTS=$(< /tmp/keycdn-ips sed 's/^/set_real_ip_from /' | sed 's/$/;/' | tr '\n' '\\' | sed 's/\\/\\n/g')

        echo keycdn IPs:
        echo $(echo | sed "/^/a $CONTENTS")
        # discourse.confに挿入
        sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
        # クリーンアップ
        rm /tmp/keycdn-ips

  - exec: "/tmp/add-keycdn-ips"
  - exec: "rm /tmp/add-keycdn-ips"

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