검색 엔진에 대한 Apache 구성
이 항목에서는 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에서 이 서버에서 실행되는 검색 엔진을 사용할 수 있도록 Apache를 비보안 프록시로 구성하는 방법에 대해 설명합니다. 이 섹션에서는 HTTP 기본 인증 설정에 대해 설명하지 않습니다. 이는 Apache와의 보안 통신에서 설명합니다.
Apache 2.4용 프록시 설정
이 섹션에서는 가상 호스트를 사용하여 프록시를 구성하는 방법에 대해 설명합니다.
-
다음과 같이
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
-
다음 명령을 입력하여 프록시가 작동하는지 확인합니다.
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-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와의 보안 통신
이 섹션에서는 Apache에서 HTTP 기본 인증을 사용하여 Apache와 검색 엔진 간의 통신을 보호하는 방법에 대해 설명합니다. 추가 옵션은 다음 리소스 중 하나를 참조하십시오.
다음 섹션 중 하나를 참조하십시오.
암호 만들기
보안상의 이유로 웹 서버 docroot를 제외한 모든 위치에서 암호 파일을 찾을 수 있습니다. 이 예제에서는 암호 파일을 새 디렉터리에 저장하는 방법을 보여 줍니다.
필요한 경우 htpasswd 설치
먼저 다음과 같이 Apache htpasswd
유틸리티가 설치되어 있는지 확인합니다.
-
htpasswd
이(가) 이미 설치되어 있는지 확인하려면 다음 명령을 입력하십시오.code language-bash which htpasswd
경로가 표시되면 경로가 설치되고, 명령이 출력을 반환하지 않으면
htpasswd
이(가) 설치되지 않습니다. -
필요한 경우
htpasswd
을(를) 설치합니다.- 우분투:
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 설정: 웹 서버 사용자 또는 다른 사용자.
이 예제에서는 웹 서버 사용자를 사용하지만 사용자의 선택은 사용자가 결정합니다.
- Elasticsearch 설정: 이 예제에서 사용자 이름은
magento_elasticsearch
입니다.
-
<password file name>
은(는) 숨겨진 파일(.
(으)로 시작)이어야 하며 사용자 이름을 반영해야 합니다. 자세한 내용은 이 섹션의 뒷부분에서 예를 참조하십시오.
화면의 지침에 따라 사용자의 암호를 생성합니다.
예시
예 1: cron
cron에 대해 한 명의 사용자에 대해서만 인증을 설정해야 합니다. 이 예제에서는 웹 서버 사용자를 사용합니다. 웹 서버 사용자의 암호 파일을 만들려면 다음 명령을 입력합니다.
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
- 우분투:
service apache2 restart
- CentOS:
확인
이 섹션에서는 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 을(를) 클릭합니다.
계속하기 전에 캐시를 플러시하고 다시 인덱싱해야 합니다.