검색 엔진에 대한 Nginx 구성
이 항목에서는 TLS(전송 계층 보안) 암호화와 HTTP 기본 인증을 함께 사용하여 웹 서버와 검색 엔진(Elasticsearch 또는 OpenSearch) 간의 통신을 보호하는 예를 설명합니다. 다른 유형의 인증도 선택적으로 구성할 수 있습니다. 해당 정보에 대한 참조를 제공합니다.
(이전 용어인 SSL(Secure Sockets Layer)은 TLS와 혼용하여 자주 사용됩니다. 이 항목에서는 TLS 을 참조합니다.
root
권한이 있는 사용자로 입력해야 합니다.Recommendations
다음 사항을 권장합니다.
-
웹 서버에서 TLS를 사용합니다.
TLS는 이 주제의 범위를 벗어나지만, 프로덕션에서 자체 서명된 인증서가 아닌 실제 인증서를 사용하는 것이 좋습니다.
-
검색 엔진은 웹 서버와 동일한 호스트에서 실행됩니다. 다른 호스트에서 검색 엔진 및 웹 서버를 실행하는 것은 이 항목의 범위를 벗어납니다.
검색 엔진과 웹 서버를 동일한 호스트에 배치하는 장점은 암호화된 통신을 가로채는 것을 불가능하게 만든다는 것이다. 검색 엔진 웹 서버는 Adobe Commerce 웹 서버와 동일하지 않아도 됩니다. 예를 들어 Adobe Commerce은 Apache를 실행할 수 있고 Elasticsearch/OpenSearch는 nginx를 실행할 수 있습니다.
검색 엔진이 공개 웹에 노출되는 경우 인증을 구성해야 합니다. 검색 엔진 인스턴스가 네트워크 내에서 보호되는 경우 필요하지 않을 수 있습니다. 호스팅 공급자와 협력하여 인스턴스를 보호하기 위해 구현해야 하는 보안 조치를 결정하십시오.
TLS에 대한 추가 정보
다음 리소스 중 하나를 참조하십시오.
프록시 설정
이 섹션에서는 Adobe Commerce에서 이 서버에서 실행 중인 검색 엔진을 사용할 수 있도록 nginx를 unsecure 프록시로 구성하는 방법에 대해 설명합니다. 이 섹션에서는 HTTP 기본 인증 설정에 대해 설명하지 않습니다. nginx와의 보안 통신에서 설명합니다.
전역 구성에서 추가 구성 파일 지정
전역 /etc/nginx/nginx.conf
에 다음 줄이 포함되어 있는지 확인하여 다음 섹션에서 설명한 다른 구성 파일을 로드합니다.
include /etc/nginx/conf.d/*.conf;
nginx를 프록시로 설정
이 섹션에서는 ngnx 서버에 액세스할 수 있는 사용자를 지정하는 방법에 대해 설명합니다.
-
텍스트 편집기를 사용하여 다음 내용이 포함된
/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
-
다음 명령을 입력하여 프록시가 작동하는지 확인합니다.
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
예를 들어 프록시가 포트 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와의 보안 통신
이 섹션에서는 보안 프록시로 HTTP 기본 인증을 설정하는 방법에 대해 설명합니다. TLS와 HTTP Basic 인증을 함께 사용하면 모든 사람이 Elasticsearch 또는 OpenSearch나 애플리케이션 서버와의 통신을 가로채지 못합니다.
nginx는 기본적으로 HTTP 기본 인증을 지원하므로 프로덕션 환경에서는 권장되지 않는 다이제스트 인증을 사용하는 것이 좋습니다.
추가 리소스:
자세한 내용은 다음 섹션을 참조하십시오.
암호 만들기
Apache htpasswd
명령을 사용하여 Elasticsearch 또는 OpenSearch(이 예제에서는 magento_elasticsearch
)에 액세스할 수 있는 사용자의 암호를 인코딩하는 것이 좋습니다.
암호를 생성하려면:
-
htpasswd
이(가) 이미 설치되어 있는지 확인하려면 다음 명령을 입력하십시오.code language-bash which htpasswd
경로가 표시되면 경로가 설치되고, 명령이 출력을 반환하지 않으면
htpasswd
이(가) 설치되지 않습니다. -
필요한 경우
htpasswd
을(를) 설치합니다.- 우분투:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- 우분투:
-
암호를 저장할
/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에 대한 액세스 설정
이 섹션에서는 ngnx 서버에 액세스할 수 있는 사용자를 지정하는 방법에 대해 설명합니다.
텍스트 편집기를 사용하여 /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; }
-
보안 프록시를 설정하는 경우
/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
예를 들어 검색 엔진 서버에서 명령을 입력하고 프록시가 포트 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
For example:
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 기본 인증 구성
검색 엔진 구성 제외 에서 설명한 것과 동일한 작업을 수행하고 Enable HTTP Auth 목록에서 Yes 을(를) 클릭한 다음 제공된 필드에 사용자 이름과 암호를 입력합니다.
Test Connection 을(를) 클릭하여 작동하는지 확인한 다음 Save Config 을(를) 클릭합니다.
계속하기 전에 캐시를 플러시하고 다시 인덱싱해야 합니다.