Samba/winbindでActiveDirectoryを使用してユーザーを認証するためのLinuxマシンのセットアップがあります。
次に、Apacheは、それを使用してユーザーを認証するようにセットアップされます。これは、以下を使用して行われます。
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
しかし、認証なしで1秒未満かかるページリクエストは、6秒以上かかるようになりました。 /var/log/samba/log.winbindd
のログインを見るとエラーは表示されませんが、ページの読み込みごとに多くの認証要求が必要なようです。基本的に、たとえばcssファイルごとに、ロードされたリソースごとに1つの認証があるようです。
/etc/samba/smb.conf
で、winbind cache time = 300
やwinbind offline logon = yes
などの設定を試してみました。また、idmapバックエンドをtdbからadに変更しようとしました。
ページの読み込み中に、winbinddのCPU使用率は非常に高くなり、約50〜60%になりますが、他のプロセスは10〜20%を超えないようです。
これをスピードアップできるいくつかの設定を見逃しましたか、またはこの問題へのより良いアプローチがありますか(mod_authnz_external以外のものを使用するなど)?
Mod_authnz_externalを使用するときにパフォーマンスを改善する方法がまだ見つかりませんでした。ただし、別のApacheモジュールmod_authnz_ldapに変更すると、パフォーマンスの問題が解消されました。唯一の欠点は、LDAP構成がシステムとApacheで重複していることです。
クライアントとしてUbuntu18.04を使用し、サーバーとしてSamba 4.7.8を使用する同様のセットアップでは、pwauthを使用した1つの認証に約200ミリ秒かかりますが、これはSVN操作には受け入れられません。単純なリポジトリリストは非常に多くのリクエストを使用するためです。
authn_socacheを認証キャッシュとしてロードすると(例にはauthnz_externalおよびauthz_unixgroupが含まれます)、次の設定でパフォーマンスが向上します。
<Location /svn>
DAV svn
SVNParentPath /var/local/svn/
SVNListParentPath on
AuthType Basic
AuthName "private area"
AuthBasicProvider socache external
AuthExternal pwauth
AuthExternalProvideCache on
AuthnCacheProvideFor external
AuthnCacheTimeout 300
Require unix-group svngroup
</Location>
AuthExternalProvideCache Onは重要です。そうでない場合、authnz_externalはログインをキャッシュしません。