為您的搜尋引擎設定Apache
此主題討論使用傳輸層安全性(TLS)加密與HTTP基本驗證的組合,保護網頁伺服器與搜尋引擎(Elasticsearch或OpenSearch)之間通訊安全的範例。 您也可以選擇設定其他型別的驗證;我們提供該資訊的參考。
(舊稱Secure Sockets Layer (SSL),經常與TLS互換使用。 在此主題中,我們稱為 TLS。)
root
許可權的使用者身分輸入。Recommendations
我們建議以下事項:
-
您的網頁伺服器使用TLS。
TLS不在本主題的討論範圍內;不過,我們強烈建議您在生產中使用真正的憑證,而不是自我簽署憑證。
-
您的搜尋引擎會在與網頁伺服器相同的主機上執行。 在不同主機上執行搜尋引擎和網頁伺服器不在本主題的討論範圍內。
將搜尋引擎和網頁伺服器放在同一部主機上的優點是,它無法攔截加密的通訊。 搜尋引擎網頁伺服器不必與Adobe Commerce網頁伺服器相同;例如,Adobe Commerce可以執行Apache,而Elasticsearch/OpenSearch可以執行nginx。
如果搜尋引擎公開於公用網站,您應該設定驗證。 如果您的搜尋引擎執行個體在網路上受到保護,則可能沒有必要。 請與您的託管提供者合作,決定您應實作哪些安全性措施來保護您的執行個體。
更多有關TLS的資訊
請參閱下列資源之一:
設定proxy
本節探討如何將Apache設定為 不安全 Proxy,讓Adobe Commerce能夠使用在此伺服器上執行的搜尋引擎。 本節不討論設定HTTP基本驗證;這將在與Apache🔗的安全通訊中討論。
設定Apache 2.4的Proxy
本節探討如何使用虛擬主機來設定Proxy。
-
啟用
mod_proxy
,如下所示:code language-bash a2enmod proxy_http
-
使用文字編輯器開啟
/etc/apache2/sites-available/000-default.conf
-
在檔案頂端新增下列指令:
code language-conf Listen 8080
-
在檔案底部新增下列內容:
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
重新啟動Apache:
code language-bash service apache2 restart
-
輸入下列命令來驗證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
公用程式:
-
輸入下列命令以判斷是否已安裝
htpasswd
:code language-bash which htpasswd
如果路徑顯示,則表示已安裝;如果命令未傳回任何輸出,則不安裝
htpasswd
。 -
如有必要,請安裝
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
建立密碼檔案
以具有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伺服器的使用者。
-
使用文字編輯器將下列內容新增至您的安全虛擬主機。
- 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>
- Apache 2.4:編輯
-
如果您已將前述新增至安全虛擬主機,請移除
Listen 8080
以及您先前新增至不安全虛擬主機的<VirtualHost *:8080>
指示。 -
儲存變更、退出文字編輯器,然後重新啟動Apache:
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
驗證
本節將討論驗證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」。
您必須先清除快取並重新索引,才能繼續。