検索エンジン用の Nginx の設定

ここでは、Transport Layer Security (TLS)暗号化とを組み合わせて、web サーバーと検索エンジン(Elasticsearchまたは OpenSearch)間の通信を保護する例について説明します。 HTTP 基本認証. オプションで、その他のタイプの認証も設定できます。この情報の参照を提供しています。

(古い用語である Secure Sockets Layer (SSL)は、多くの場合、TLS と同じ意味で使用されます。 このトピックでは、を参照します。 TLS.)

WARNING
特に指定がない限り、このトピックのすべてのコマンドは、次のコードを持つユーザーとして入力する必要があります root 権限。

Recommendations

以下をお勧めします。

  • Web サーバーで TLS が使用されている。

    TLS はこのトピックの範囲外ですが、実稼動環境では、自己署名証明書ではなく、実際の証明書を使用することを強くお勧めします。

  • 検索エンジンは、web サーバーと同じホストで実行されます。 異なるホスト上で検索エンジンと Web サーバーを実行する方法については、このトピックの範囲外です。

    検索エンジンと Web サーバを同一ホストに配置する利点は、暗号化された通信を傍受できないことです。 検索エンジン web サーバーは、Adobe Commerce web サーバーと同じである必要はありません。例えば、Adobe Commerceは Apache を実行でき、Elasticsearch/OpenSearch は nginx を実行できます。

    検索エンジンが公開 web に公開されている場合は、認証を設定する必要があります。 検索エンジンインスタンスがネットワーク内で保護されている場合は、この操作は必要ない場合があります。 ホスティングプロバイダーと協力して、インスタンスを保護するために実装する必要があるセキュリティ対策を決定します。

TLS の詳細情報

次のいずれかのリソースを参照してください。

プロキシの設定

NOTE
OpenSearch のサポートは 2.4.4 で追加されました。OpenSearch は、互換性のあるElasticsearchのフォークです。 参照: Elasticsearchを OpenSearch に移行する を参照してください。

このセクションでは、nginx を 安全でない Adobe Commerceがこのサーバーで実行中の検索エンジンを使用できるように、プロキシを設定します。 この項では、HTTP 基本認証の設定については説明しません。詳細は、を参照してください。 nginx との安全な通信.

NOTE
この例ではプロキシが保護されていない理由は、設定と検証が容易だからです。 必要に応じて、このプロキシで TLS を使用できます。そのためには、プロキシ情報を安全なサーバーブロック設定に必ず追加してください。

グローバル設定で追加の設定ファイルを指定します

グローバルな /etc/nginx/nginx.conf には次の行が含まれるので、以下の節で説明するその他の設定ファイルが読み込まれます。

include /etc/nginx/conf.d/*.conf;

プロキシとしての nginx の設定

このセクションでは、nginx サーバにアクセスできるユーザを指定する方法について説明します。

  1. テキストエディターを使用したファイルの作成 /etc/nginx/conf.d/magento_es_auth.conf 次の内容を含みます。

    code language-conf
    server {
       listen 8080;
       location /_cluster/health {
          proxy_pass http://localhost:9200/_cluster/health;
       }
    }
    
  2. nginx を再起動します。

    code language-bash
    service nginx restart
    
  3. 次のコマンドを入力して、プロキシが機能することを確認します。

    code language-bash
    curl -i http://localhost:<proxy port>/_cluster/health
    

    例えば、プロキシでポート 8080 が使用されている場合は、次のようになります。

    code language-bash
    curl -i http://localhost:8080/_cluster/health
    

    次のようなメッセージが成功を示して表示されます。

    code language-terminal
    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 基本認証 安全なプロキシを使用します。 TLS と HTTP 基本認証を一緒に使用すると、Elasticsearchや OpenSearch、またはアプリケーションサーバーとの通信がインターセプトされるのを防ぐことができます。

Nginx は HTTP 基本認証をネイティブでサポートしているので、例えば次のような上書きを推奨します。 ダイジェスト認証(実稼動環境では推奨されません)。

追加のリソース:

詳しくは、次の節を参照してください。

パスワードの作成

Apache を使用することをお勧めします htpasswd Elasticsearchまたは OpenSearch (という名前)にアクセスできるユーザーのパスワードをエンコードするコマンド magento_elasticsearch この例では)。

パスワードを作成するには:

  1. 次のコマンドを入力して、 htpasswd はすでにインストールされています:

    code language-bash
    which htpasswd
    

    パスが表示される場合は、インストールされます。コマンドが出力を返さない場合は、 htpasswd はインストールされていません。

  2. 必要に応じて、 htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools
  3. を作成 /etc/nginx/passwd パスワードを保存するディレクトリ:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    セキュリティ上の理由から、 <filename> 非表示にする必要があります。つまり、ピリオドで始まる必要があります。
  4. (オプション)。 別のユーザーをパスワードファイルに追加するには、同じコマンドを -c (作成)オプション:

    code language-bash
    htpasswd /etc/nginx/passwd/.<filename> <username>
    
  5. 内容を確認する /etc/nginx/passwd は正しいです。

nginx へのアクセスの設定

このセクションでは、nginx サーバにアクセスできるユーザを指定する方法について説明します。

WARNING
次に示す例はです。 安全でない プロキシ。 安全なプロキシを使用するには、次の内容(リッスンポートを除く)を安全なサーバーブロックに追加します。

テキストエディターを使用して、次のいずれかを変更します /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;
}
NOTE
上記の例で示した検索エンジンのリッスンポートは、例にすぎません。 セキュリティ上の理由から、デフォルト以外のリッスンポートを使用することをお勧めします。

検索エンジンの制限付きコンテキストの設定

このセクションでは、検索エンジン サーバーにアクセスできるユーザーを指定する方法について説明します。

  1. 次のコマンドを入力して、認証設定を格納するディレクトリを作成します。

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. テキストエディターを使用したファイルの作成 /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;
    }
    
  3. 安全なプロキシを設定する場合は、次を削除します /etc/nginx/conf.d/magento_es_auth.conf.

  4. nginx を再起動し、次のセクションに進みます。

    code language-bash
    service nginx restart
    

検証

この節では、HTTP 基本認証が機能していることを確認する 2 つの方法について説明します。

  • の使用 curl コマンドを使用して、クラスタの状態を取得するには、ユーザ名とパスワードを入力する必要があることを確認します。
  • 管理での HTTP 基本認証の設定

の使用 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}

管理での HTTP 基本認証の設定

同じタスクを実行します。詳しくは、 検索エンジンの設定 例外 click Yes から Enable HTTP Auth の一覧を開き、指定したフィールドにユーザー名とパスワードを入力します。

クリック Test Connection 正常に動作するようにし、「 Save Config.

続行する前に、キャッシュをフラッシュしてインデックスを再作成する必要があります。

recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995