為您的搜尋引擎設定Apache

此主題討論使用傳輸層安全性(TLS)加密與HTTP基本驗證的組合,保護網頁伺服器與搜尋引擎(Elasticsearch或OpenSearch)之間通訊安全的範例。 您也可以選擇設定其他型別的驗證;我們提供該資訊的參考。

(舊稱Secure Sockets Layer (SSL),經常與TLS互換使用。 在此主題中,我們稱為​ TLS。)

WARNING
除非另有說明,否則此主題中的所有命令都必須以具有root許可權的使用者身分輸入。

Recommendations

我們建議以下事項:

  • 您的網頁伺服器使用TLS。

    TLS不在本主題的討論範圍內;不過,我們強烈建議您在生產中使用真正的憑證,而不是自我簽署憑證。

  • 您的搜尋引擎會在與網頁伺服器相同的主機上執行。 在不同主機上執行搜尋引擎和網頁伺服器不在本主題的討論範圍內。

    將搜尋引擎和網頁伺服器放在同一部主機上的優點是,它無法攔截加密的通訊。 搜尋引擎網頁伺服器不必與Adobe Commerce網頁伺服器相同;例如,Adobe Commerce可以執行Apache,而Elasticsearch/OpenSearch可以執行nginx。

    如果搜尋引擎公開於公用網站,您應該設定驗證。 如果您的搜尋引擎執行個體在網路上受到保護,則可能沒有必要。 請與您的託管提供者合作,決定您應實作哪些安全性措施來保護您的執行個體。

更多有關TLS的資訊

請參閱下列資源之一:

設定proxy

NOTE
2.4.4版本新增OpenSearch支援。OpenSearch是相容的Elasticsearch復本。 如需詳細資訊,請參閱將Elasticsearch移轉至OpenSearch

本節探討如何將Apache設定為​ 不安全 Proxy,讓Adobe Commerce能夠使用在此伺服器上執行的搜尋引擎。 本節不討論設定HTTP基本驗證;這將在與Apache🔗的安全通訊中討論。

NOTE
在此範例中,Proxy不受保護的原因是它更容易設定和驗證。 您可以透過此Proxy使用TLS。 如果您想要這麼做,請確定您將Proxy資訊新增至安全虛擬主機設定。

設定Apache 2.4的Proxy

本節探討如何使用虛擬主機來設定Proxy。

  1. 啟用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. 輸入下列命令來驗證Proxy是否有效:

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

    例如,如果您使用Elasticsearch,而您的Proxy使用連線埠8080:

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

    類似下列顯示以指示成功的訊息:

    code language-none
    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的安全通訊

本節討論如何使用HTTP Basic驗證和Apache來保護Apache與搜尋引擎之間的通訊。 如需更多選項,請參閱下列資源之一:

請參閱下列其中一節:

建立密碼

基於安全考量,您可以在網頁伺服器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伺服器使用者,但使用者的選擇由您決定。

    • 設定Elasticsearch:在此範例中,使用者名為magento_elasticsearch
  • <password file name>必須為隱藏的檔案(以.開頭),且應反映使用者的名稱。 如需詳細資訊,請參閱本節稍後的範例。

按照畫面上的提示為使用者建立密碼。

範例

範例1: cron
您必須為cron僅設定一個使用者的驗證;在此範例中,我們使用web伺服器使用者。 若要建立Web伺服器使用者的密碼檔,請輸入下列命令:

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

範例2:Elasticsearch
您必須為兩個使用者設定驗證:一個具有nginx存取權,另一個具有Elasticsearch存取權。 若要為這些使用者建立密碼檔案,請輸入下列命令:

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 Basic驗證可防止任何人攔截與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基本驗證是否正常運作的兩種方式:

  • 使用curl命令來驗證您必須輸入使用者名稱和密碼才能取得叢集狀態
  • 在Admin中設定HTTP基本驗證

使用curl命令來驗證叢集狀態

輸入下列命令:

curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health

例如,如果您在搜尋引擎伺服器上輸入命令,且您的Proxy使用連線埠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基本驗證

執行搜尋引擎組態 中討論過的相同工作(除了),請從​ Enable HTTP Auth ​清單中按一下​ Yes,然後在提供的欄位中輸入您的使用者名稱和密碼。

按一下「Test Connection」以確認其運作正常,然後按一下「Save Config」。

您必須先清除快取並重新索引,才能繼續。

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