tl:dr、リクエストがnginx error_pageディレクティブを使用してリダイレクトされた場合、どのようにカスタムヘッダーがこのリダイレクトと共に渡されるかを確認できます。Nginxがerror_pageリダイレクションを通じてHTTPヘッダを渡す
私は現在、nginxがLDAPサーバーに対して認証するシステムを実装しています。これは、逆プロキシとして機能します。これに基づいてhttps://www.nginx.com/blog/nginx-plus-authenticate-users/ それは、それが動作する方法は、それは、別のポート上で実行されている認証ページに要求を送信する包括的なサーバーブロックを持っている、これは戻って403または200のいずれかのクッキーの内容に基づいて送信されます。これが403の場合、ユーザーはログインページに送信されます(宛先が200の場合)。
例nginx confは次のとおりです。 場所/ { auth_request/auth-proxy;
# redirect 401 to login form
error_page 401 =200 /login;
proxy_pass http://backend/;
}
location /login {
proxy_pass http://backend/login;
# Login service returns a redirect to the original URI
# and sets the cookie for the ldap-auth daemon
proxy_set_header X-Target $request_uri;
}
location = /auth-proxy {
internal;
# The ldap-auth daemon listens on port 8888, as set
# in nginx-ldap-auth-daemon.py.
# Change the IP address if the daemon is not running on
# the same host as NGINX/NGINX Plus.
proxy_pass http://127.0.0.1:8888;
問題は、私は認証パートタイムアウトになり、関係なく、クッキーが有効であるかどうかの、403コードを返す変更を行った、です。しかし、私はログインページでこれが起こったことをユーザーに知らせたいので、python認証コードはX-authenticationfailヘッダーにエラー値を設定します。
これは、認証コードにタイムアウトしたCookieを送信するためにcurlを使用して確認し、ヘッダーを読み戻しました。しかし、ログインのpythonコードが呼び出されると、このヘッダは消えてしまいました。私はこれがそれを転送していないnginxのためだと思う。 "proxy_set_header X-authenticationfail $ http_x_authenticationfail;"、 "add_header X-authenticationfail" test "always"という行を追加しようとしました。 error_pageディレクティブの前に置かれますが、これは効果がありません。私も同じ場所で "proxy_pass_header X-authenticationfail"を試しましたが、これも失敗しました。
サーバブロックには「underscores_in_headers on」が設定され、「proxy_pass_request_headers on」が設定されています。ログインブロックで、 "proxy_set_header X-authenticationfail" testvalue ";"ログインpythonコードに値を与え、そこからブラウザに戻ります。
これまでにありがとうございました!
単にあなたの '/ login'場所 –
でproxy_set_headerのX-Authenticationfail $のsent_http_x_authenticationfail'ちょうどまだ運、 – James
はさらに' auth_request_set $ falure_reason $ sent_http_x_authenticationfailを入れていない、ということを試みた '置く;'右auth_request' '下回ります。どこでも '$ falure_reason'を使う必要はありません。どうにかしてこの行の存在が私の最初の解決策を作ってくれるでしょう –