2026年10月21日

2026年10月21日

Nginxでauthentication requestを使った外部認証

はじめに

Web開発において、ユーザーの認証は重要なセキュリティ機能であり、サイトへのアクセスを制御するために必要不可欠です。Nginxは非常に高いパフォーマンスと柔軟性で知られていますが、直接ユーザーを認証するための機能を持つわけではありません。

この記事では、Apache Httpdや他のサーバーソフトウェアを使用してユーザーを認証し、その結果を受け取るためのNginxの「auth_request」モジュールの設定方法について説明します。これにより、既存の認証システムを活用しながら、Nginxで外部からの認証情報を取得することが可能になります。

症状・背景

このテーマが必要になる主な場面:

  • <場面1>: サイト全体へのアクセス制御にApache Httpdを使用しているが、フロントエンドはNginxを用いている
  • <場面2>: 安定性とパフォーマンスの観点からNginxを採用したいが、認証機能が必要なサイトの場合
  • <場面3>: 既存のシステムやアプリケーションに組み込まれている認証モジュールを使用し続けたい場合
  • <場面4>: 複数のサーバー間で認証情報を共有する必要がある場合

手順・設定方法

ステップ1: サービスとユーザーを追加

# Nginx公式リポジトリの追加(CentOSの場合)
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# Nginxのインストール
sudo yum install nginx

# Apache Httpdのインストールとサービスの起動
sudo yum install httpd
sudo systemctl start httpd

ステップ2: ユーザー認証用のファイルを作成

# .htpasswdファイルの生成(Apache Httpdで使用)
sudo htpasswd -c /etc/httpd/.htpasswd user1

# Nginxが参照する外部認証リクエスト先の設定を追加
echo 'auth_request /login;' | sudo tee /etc/nginx/conf.d/auth.conf > /dev/null

ステップ3: 外部認証のためのApache Httpd設定

# Apache Httpdの外部認証設定ファイル作成
sudo echo -e "<Location /> \n AuthName 'ユーザー名とパスワードを入力してください' \n AuthType Basic \n AuthUserFile /etc/httpd/.htpasswd \n Require valid-user \n Satisfy any" | sudo tee /etc/httpd/conf.d/auth_request.conf > /dev/null

# Nginxの外部認証要求設定ファイル作成
sudo echo -e 'location = /login { \n auth_request_set $auth_status $upstream_status; \n proxy_pass http://localhost:80/.htaccess; \n}' | sudo tee /etc/nginx/conf.d/auth_request.conf > /dev/null

# Apache Httpdの外部認証設定を有効化
sudo systemctl restart httpd

ステップ4: Nginxの設定ファイルへの追加

# 公開ディレクトリのアクセス制御にauth_requestを使用
echo 'location / { \n auth_request /login; \n proxy_pass http://localhost:80/; \n}' | sudo tee -a /etc/nginx/conf.d/default.conf > /dev/null

注意事項

  • <実践的な注意点1>: 複数のユーザー間で認証情報を共有するためには、適切なセキュリティ対策が必要です。
  • <実践的な注意点2>: Nginxと外部サーバーとの通信はSSLを活用して暗号化することが推奨されます。
  • <セキュリティ上の注意>: .htpasswdファイルやその他の認証関連の設定ファイルは適切に権限を管理し、アクセス制御を行うべきです。
  • <パフォーマンス/運用上の注意>: 複数のリクエストで同じユーザー情報を取得する場合はキャッシュ機能を利用することを検討してください。

まとめ

1. <キー1>: Nginxは外部認証モジュールを使用して、Apache Httpdなどの他のサーバーから認証情報を受け取ることができます。

2. <キー2>: 複数のWebサーバーソフトウェア間で認証情報を共有することで、統一されたセキュリティポリシーを実現できます。

3. <キー3>: Nginxと外部認証ソースとの間での通信は安全に保つため、SSL/TLSを使用することを強く推奨します。

4. <キー4>: .htpasswdファイルの管理には十分な注意が必要です。適切なアクセス権限を設定し、バックアップも忘れずに取るようにしてください。

5. <キー5>: Nginxと外部認証ソースとの間でパフォーマンスを向上させるためには、キャッシュ機能を利用することでリクエストの数を減らすことができます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲