検索エンジン用に Apache を設定する

ここでは、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 に移行する を参照してください。

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

NOTE
この例ではプロキシが保護されていない理由は、設定と検証が容易だからです。 このプロキシでは TLS を使用できます。 これを行う場合は、必ずプロキシ情報を安全な仮想ホスト設定に追加してください。

Apache 2.4 用のプロキシの設定

この節では、仮想ホストを使用してプロキシを設定する方法について説明します。

  1. Enable (有効) mod_proxy 次のように設定します。

    code language-bash
    a2enmod proxy_http
    
  2. テキストエディターを使用して開く /etc/apache2/sites-available/000-default.conf

  3. ファイルの先頭に次のディレクティブを追加します。

    code language-conf
    Listen 8080
    
  4. ファイルの下部に次を追加します。

    code language-conf
    <VirtualHost *:8080>
        ProxyPass "/" "http://localhost:9200/"
        ProxyPassReverse "/" "http://localhost:9200/"
    </VirtualHost>
    
  5. Apache を再起動します。

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

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

    例えば、プロキシを使用していて、Elasticsearchがポート 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}
    

Apache との安全な通信

ここでは、を使用して、Apache と検索エンジン間の通信を保護する方法について説明します HTTP ベーシック apache での認証。 その他のオプションについては、次のいずれかのリソースを参照してください。

以下のセクションの 1 つを参照してください。

パスワードの作成

セキュリティ上の理由から、web サーバーの docroot を除く任意の場所にパスワードファイルを配置できます。 この例では、パスワードファイルを新しいディレクトリに保存する方法を示します。

必要に応じて htpasswd をインストールします。

まず、Apache があるかどうかを確認します htpasswd ユーティリティは次のようにインストールされます。

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

    code language-bash
    which htpasswd
    

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

  2. 必要に応じて、 htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools

パスワードファイルの作成

を使用して、ユーザーとして次のコマンドを入力します root 権限:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>

ここで、

  • <username> 次になることができます。

    • Cron の設定:web サーバーユーザーまたは別のユーザー。

    この例では web サーバーユーザーを使用しますが、ユーザーの選択はユーザー次第です。

    • Elasticsearchの設定:ユーザーの名前 magento_elasticsearch この例では、
  • <password file name> は非表示のファイルである必要があります(で始まります) .)に設定し、ユーザー名を反映させる必要があります。 詳しくは、この節の後半の例を参照してください。

画面の指示に従って、ユーザーのパスワードを作成します。

例 1:cron
cron 用に 1 人のユーザーの認証のみを設定する必要があります。この例では、web サーバーユーザーを使用します。 Web サーバーユーザーのパスワードファイルを作成するには、次のコマンドを入力します。

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache

例 2:Elasticsearch
2 人のユーザーに対してElasticsearchを設定する必要があります。1 人は nginx にアクセスでき、もう 1 人は認証にアクセスできます。 これらのユーザーのパスワードファイルを作成するには、次のコマンドを入力します。

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch

ユーザーを追加

パスワードファイルに別のユーザーを追加するには、ユーザーとして次のコマンドを入力します。 root 権限:

htpasswd /usr/local/apache/password/.htpasswd <username>

Apache との安全な通信

この節では、の設定方法について説明します HTTP 基本認証. TLS と HTTP 基本認証を一緒に使用すると、Elasticsearchや OpenSearch、またはアプリケーションサーバーとの通信がインターセプトされるのを防ぐことができます。

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

  1. テキストエディターを使用して、次の内容を安全な仮想ホストに追加します。

    • Apache 2.4:編集 /etc/apache2/sites-available/default-ssl.conf
    code language-conf
    <Proxy *>
        Order deny,allow
        Allow from all
    
        AuthType Basic
        AuthName "Elasticsearch Server" # or OpenSearch Server
        AuthBasicProvider file
        AuthUserFile /usr/local/apache/password/.htpasswd_elasticsearch
        Require valid-user
    
      # This allows OPTIONS-requests without authorization
      <LimitExcept OPTIONS>
            Require valid-user
      </LimitExcept>
    </Proxy>
    
  2. 上記のを安全な仮想ホストに追加した場合は、 Listen 8080 および <VirtualHost *:8080> 安全でない仮想ホストに以前に追加したディレクティブ。

  3. 変更を保存し、テキストエディターを終了して、Apache を再起動します。

    • CentOS: service httpd restart
    • Ubuntu: service apache2 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