為您的搜尋引擎設定Nginx
此主題討論使用傳輸層安全性(TLS)加密與HTTP基本驗證的組合,保護網頁伺服器與搜尋引擎(Elasticsearch或OpenSearch)之間通訊安全的範例。 您也可以選擇設定其他型別的驗證;我們提供該資訊的參考。
(舊稱Secure Sockets Layer (SSL),經常與TLS互換使用。 在此主題中,我們稱為 TLS。)
root
許可權的使用者身分輸入。Recommendations
我們建議以下事項:
-
您的網頁伺服器使用TLS。
TLS不在本主題的討論範圍內;不過,我們強烈建議您在生產中使用真正的憑證,而不是自我簽署憑證。
-
您的搜尋引擎會在與網頁伺服器相同的主機上執行。 在不同主機上執行搜尋引擎和網頁伺服器不在本主題的討論範圍內。
將搜尋引擎和網頁伺服器放在同一部主機上的優點是,它無法攔截加密的通訊。 搜尋引擎網頁伺服器不必與Adobe Commerce網頁伺服器相同;例如,Adobe Commerce可以執行Apache,而Elasticsearch/OpenSearch可以執行nginx。
如果搜尋引擎公開於公用網站,您應該設定驗證。 如果您的搜尋引擎執行個體在網路上受到保護,則可能沒有必要。 請與您的託管提供者合作,決定您應實作哪些安全性措施來保護您的執行個體。
更多有關TLS的資訊
請參閱下列資源之一:
設定proxy
本節討論如何將nginx設定為 不安全 Proxy,讓Adobe Commerce能夠使用在此伺服器上執行的搜尋引擎。 本節不討論設定HTTP基本驗證;這將在與nginx🔗的安全通訊中討論。
指定全域組態中的其他組態檔
請確定您的全域/etc/nginx/nginx.conf
包含下列行,以便載入下列章節中討論的其他組態檔:
include /etc/nginx/conf.d/*.conf;
將nginx設為Proxy
本節討論如何指定誰可以存取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-bash service nginx restart
-
輸入下列命令來驗證Proxy是否有效:
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
例如,如果您的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}
與nginx的安全通訊
本節討論如何使用您的安全Proxy設定HTTP基本驗證。 同時使用TLS和HTTP Basic驗證可防止任何人攔截與Elasticsearch、OpenSearch或您的應用程式伺服器的通訊。
由於nginx原生支援HTTP基本驗證,因此我們建議將其覆寫為摘要式驗證,在生產環境中不建議這樣做。
其他資源:
如需詳細資訊,請參閱下列章節:
建立密碼
建議您使用Apache htpasswd
命令,為具有Elasticsearch或OpenSearch存取權(在此範例中名稱為magento_elasticsearch
)的使用者編碼密碼。
若要建立密碼:
-
輸入下列命令以判斷是否已安裝
htpasswd
:code language-bash which htpasswd
如果路徑顯示,則表示已安裝;如果命令未傳回任何輸出,則不安裝
htpasswd
。 -
如有必要,請安裝
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
-
建立
/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>
應該隱藏;也就是說,它必須以句點開頭。 -
(選擇性)。 若要將其他使用者新增至您的密碼檔案,請輸入相同的命令,但不使用
-c
(建立)選項:code language-bash 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-bash 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; }
-
如果您設定安全Proxy,請刪除
/etc/nginx/conf.d/magento_es_auth.conf
。 -
重新啟動nginx並繼續下一節:
code language-bash service nginx 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」。
您必須先清除快取並重新索引,才能繼續。