サーバーメトリクスのグラフを表示するためにgrafanaを使用します。 GrafanaはJSアプリであり、この場合、グラファイトからデータを取得し、elasticsearchに検索クエリを保存しています。今のところ同じマシン上にありますが、3つのサービスすべてに独自の仮想ホストがあります。 JSルールのため、graphite-およびelasticsearch-vhostにCORSヘッダーを追加しました。グラファイトはpython/Djangoアプリであるため、graphite-vhostはWSGIへのルーティングリクエストです。 elasticsearch-vhostは、ポート443
からlocalhost:9200
にデータを転送するためのリバースプロキシです。これは、elasticsearch-serviceを直接世界に公開しないようにするのに役立ち、CORSヘッダーを追加する場所も提供します。これまでのところ、これは機能します。grafanaは両方のサービスと通信できます。
Basic Auth
をgrafanaとgraphite-hostsに追加しました。これらは正常に機能し、期待どおりです。 grafanaは、データを取得して表示することができます。
Basic Auth
をelasticsearch-vhostに追加すると、問題が発生します。 Auth-settingsを<Location / >
-ブロックに追加できますが、CORSヘッダーが無効になっているようです。認証を有効にすると、ブラウザまたはcurlでelasticsearchを使用できます。
ただし、grafanaはelasticsearchで構成済みのダッシュボードを検索できません。
GrafanaはGET
-リクエストで始まるため、検索はOPTIONS
よりも複雑なようです。これは401エラーで失敗します。おかしなことに、grafanaは既知のダッシュボード(単純なGET
)を取得できます。
ヘッダーでのHTTPメソッドの制限については触れていません。
だから、これを要約すると:
How can I add basic auth to an Apache proxy while using CORS headers?
Apacheの構成を確認したい場合は、どの部分を教えてください。「念のため」、かなりの長さの3つのvhostを投稿したくありません。
私は常にOPTIONS
-リクエストを許可することでこれを解決しました。これらのリクエストは、サーバーがそこにあるかどうかを確認するための「ping」としてのみ機能します。
<Proxy *>
Order deny,allow
Allow from all
AuthType Basic
AuthBasicProvider file
AuthUserFile /path/to/passwords
# This allows OPTIONS-requests without authorization
<LimitExcept OPTIONS>
Require valid-user
</LimitExcept>
</Proxy>
よりクリーンなアプローチは、グラファナとリクエストの作成方法を変更することですが、これにより、新しい問題を開かずに当面の問題を解決できます。
これは現在、セキュリティの観点から事態を悪化させることはありません。
OPTIONS
には現在、詳細情報を公開するための本文がありませんOPTIONS
は、常に何もしないという意味でべき等ですGET /
で確認することもできます。OPTIONS
以外の他のすべてのHTTPメソッドはパスワードで保護されています