検索エンジン用にNginxを設定する
ここでは、Transport Layer Security (TLS)暗号化と HTTP 基本認証 の組み合わせを使用して、web サーバーと検索エンジン(Elasticsearchまたは OpenSearch)間の通信を保護する例について説明します。 オプションで、その他のタイプの認証も設定できます。この情報の参照を提供しています。
(古い用語である Secure Sockets Layer (SSL)は、多くの場合、TLS と同じ意味で使用されます。 このトピックでは、TLS)を参照します。
root 権限を持つユーザーとして入力する必要があります。推奨事項
以下をお勧めします。
-
Web サーバーで TLS が使用されている。
TLS はこのトピックの範囲外ですが、実稼動環境では、自己署名証明書ではなく、実際の証明書を使用することを強くお勧めします。
-
検索エンジンは、web サーバーと同じホストで実行されます。 異なるホスト上で検索エンジンと Web サーバーを実行する方法については、このトピックの範囲外です。
検索エンジンと Web サーバを同一ホストに配置する利点は、暗号化された通信を傍受できないことです。 検索エンジン web サーバーは、Adobe Commerce web サーバーと同じである必要はありません。例えば、Adobe Commerceは Apache を実行でき、Elasticsearch/OpenSearch は nginx を実行できます。
検索エンジンが公開 web に公開されている場合は、認証を設定する必要があります。 検索エンジンインスタンスがネットワーク内で保護されている場合は、この操作は必要ない場合があります。 ホスティングプロバイダーと協力して、インスタンスを保護するために実装する必要があるセキュリティ対策を決定します。
TLS の詳細情報
次のいずれかのリソースを参照してください。
プロキシの設定
この節では、Adobe Commerceがこのサーバーで実行されている検索エンジンを使用できるように、unsecure プロキシとしてnginxを設定する方法について説明します。 この節では、HTTP Basic認証の設定については説明しません。これは、nginxとの通信の保護で説明しています。
グローバル設定で追加の設定ファイルを指定します
グローバル /etc/nginx/nginx.confに次の行が含まれていることを確認して、次の節で説明する他の設定ファイルを読み込みます。
include /etc/nginx/conf.d/*.conf;
nginxをプロキシとして設定する
この節では、nginx サーバーにアクセスできるユーザーを指定する方法について説明します。
-
テキストエディターを使用して、次の内容を含むファイル
/etc/nginx/conf.d/magento_es_auth.confを作成します。code language-conf server { listen 8080; location /_cluster/health { proxy_pass http://localhost:9200/_cluster/health; } } -
nginxを再起動します。
code language-shell service nginx restart -
次のコマンドを入力して、プロキシが機能することを確認します。
code language-shell curl -i http://localhost:<proxy port>/_cluster/health例えば、プロキシでポート 8080を使用している場合は、次のようになります。
code language-shell curl -i http://localhost:8080/_cluster/health成功を示す次の表示と同様のメッセージ:
code language-text HTTP/1.1 200 OK Date: Tue, 23 Feb 2019 20:38:03 GMT Content-Type: application/json; charset=UTF-8 Content-Length: 389 Connection: keep-alive {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
nginxとの安全なコミュニケーション
この節では、セキュアプロキシでHTTP Basic認証を設定する方法について説明します。 TLS認証とHTTP Basic認証を一緒に使用すると、ElasticsearchやOpenSearch、またはアプリケーションサーバーとの通信を誰もが傍受できなくなります。
nginxはHTTP Basic認証をネイティブにサポートしているので、実稼動環境では推奨されていない ダイジェスト認証などの方法で認証することをお勧めします。
関連トピックス:
詳しくは、次の節を参照してください。
パスワードの作成
ElasticsearchまたはOpenSearchへのアクセス権を持つユーザー(この例ではmagento_elasticsearchという名前)のパスワードをエンコードするには、Apache htpasswd コマンドを使用することをお勧めします。
パスワードを作成するには:
-
次のコマンドを入力して、
htpasswdが既にインストールされているかどうかを確認します。code language-shell which htpasswdパスが表示された場合はインストールされます。コマンドが出力を返さない場合は、
htpasswdはインストールされません。 -
必要に応じて、
htpasswdをインストールします。- Ubuntu:
apt-get -y install apache2-utils - CentOS:
yum -y install httpd-tools
- Ubuntu:
-
パスワードを保存する
/etc/nginx/passwdディレクトリを作成します。code language-shell mkdir -p /etc/nginx/passwdcode language-shell htpasswd -c /etc/nginx/passwd/.<filename> <username>note warning WARNING セキュリティ上の理由から、 <filename>は非表示にする必要があります。つまり、期間で始める必要があります。 -
(オプション)。 パスワードファイルに別のユーザーを追加するには、
-c(作成)オプションを使用せずに同じコマンドを入力します。code language-shell htpasswd /etc/nginx/passwd/.<filename> <username> -
/etc/nginx/passwdの内容が正しいことを確認してください。
nginxへのアクセスを設定する
この節では、nginx サーバーにアクセスできるユーザーを指定する方法について説明します。
テキストエディターを使用して、次の内容で/etc/nginx/conf.d/magento_es_auth.conf (安全でない)または安全なサーバーブロックを変更します。
server {
listen 8080;
server_name 127.0.0.1;
location / {
limit_except HEAD {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch;
}
proxy_pass http://127.0.0.1:9200;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /_aliases {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch;
proxy_pass http://127.0.0.1:9200;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
include /etc/nginx/auth/*.conf;
}
検索エンジンの制限付きコンテキストの設定
この節では、検索エンジンサーバーにアクセスできるユーザーを指定する方法について説明します。
-
次のコマンドを入力して、認証設定を保存するディレクトリを作成します。
code language-shell mkdir /etc/nginx/auth/ -
テキストエディターを使用して、次の内容を含むファイル
/etc/nginx/auth/magento_elasticsearch.confを作成します。code language-conf location /elasticsearch { auth_basic "Restricted - elasticsearch"; auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch; proxy_pass http://127.0.0.1:9200; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } -
安全なプロキシを設定している場合は、
/etc/nginx/conf.d/magento_es_auth.confを削除します。 -
nginxを再起動し、次のセクションに進みます。
code language-shell service nginx restart
検証
この節では、HTTP Basic認証が機能していることを確認する2つの方法について説明します。
curlコマンドを使用して検証するには、ユーザー名とパスワードを入力してクラスターステータスを取得する必要があります- AdminでのHTTP Basic認証の設定
curl コマンドを使用してクラスターの状態を確認する
次のコマンドを入力します。
curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
例えば、検索エンジンサーバーでコマンドを入力し、プロキシでポート 8080を使用している場合は、次のようになります。
curl -i http://localhost:8080/_cluster/health
認証に失敗したことを示す次のメッセージが表示されます。
HTTP/1.1 401 Unauthorized
Date: Tue, 23 Feb 2016 20:35:29 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
</body>
</html>
次のコマンドを実行します。
curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
例:
curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health
この場合、コマンドは次のようなメッセージで成功します。
HTTP/1.1 200 OK
Date: Tue, 23 Feb 2016 20:38:03 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 389
Connection: keep-alive
{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
AdminでのHTTP Basic認証の設定
検索エンジン設定 で説明したタスクと同じタスクを実行します(を除く)。Enable HTTP Auth リストから Yes をクリックし、指定されたフィールドにユーザー名とパスワードを入力します。
Test Connectionをクリックして動作することを確認し、Save Configをクリックします。
続行する前に、キャッシュをフラッシュし、インデックスを再作成する必要があります。