검색 엔진에 대한 Apache 구성

이 항목에서는 TLS(전송 계층 보안) 암호화와 HTTP 기본 인증을 함께 사용하여 웹 서버와 검색 엔진(Elasticsearch 또는 OpenSearch) 간의 통신을 보호하는 예를 설명합니다. 다른 유형의 인증도 선택적으로 구성할 수 있습니다. 해당 정보에 대한 참조를 제공합니다.

(이전 용어인 SSL(Secure Sockets Layer)은 TLS와 혼용하여 자주 사용됩니다. 이 항목에서는 TLS ​을 참조합니다.

WARNING
별도로 지정하지 않는 한 이 항목의 모든 명령은 root 권한이 있는 사용자로 입력해야 합니다.

Recommendations

다음 사항을 권장합니다.

  • 웹 서버에서 TLS를 사용합니다.

    TLS는 이 주제의 범위를 벗어나지만, 프로덕션에서 자체 서명된 인증서가 아닌 실제 인증서를 사용하는 것이 좋습니다.

  • 검색 엔진은 웹 서버와 동일한 호스트에서 실행됩니다. 다른 호스트에서 검색 엔진 및 웹 서버를 실행하는 것은 이 항목의 범위를 벗어납니다.

    검색 엔진과 웹 서버를 동일한 호스트에 배치하는 장점은 암호화된 통신을 가로채는 것을 불가능하게 만든다는 것이다. 검색 엔진 웹 서버는 Adobe Commerce 웹 서버와 동일하지 않아도 됩니다. 예를 들어 Adobe Commerce은 Apache를 실행할 수 있고 Elasticsearch/OpenSearch는 nginx를 실행할 수 있습니다.

    검색 엔진이 공개 웹에 노출되는 경우 인증을 구성해야 합니다. 검색 엔진 인스턴스가 네트워크 내에서 보호되는 경우 필요하지 않을 수 있습니다. 호스팅 공급자와 협력하여 인스턴스를 보호하기 위해 구현해야 하는 보안 조치를 결정하십시오.

TLS에 대한 추가 정보

다음 리소스 중 하나를 참조하십시오.

프록시 설정

NOTE
2.4.4에 OpenSearch 지원이 추가되었습니다. OpenSearch는 호환 가능한 Elasticsearch 포크입니다. 자세한 내용은 OpenSearch로 Elasticsearch 마이그레이션을 참조하십시오.

이 섹션에서는 Adobe Commerce에서 이 서버에서 실행되는 검색 엔진을 사용할 수 있도록 Apache를 비보안 프록시로 구성하는 방법에 대해 설명합니다. 이 섹션에서는 HTTP 기본 인증 설정에 대해 설명하지 않습니다. 이는 Apache와의 보안 통신에서 설명합니다.

NOTE
이 예제에서 프록시가 보안되지 않은 이유는 보다 쉽게 설정하고 확인할 수 있기 때문입니다. 이 프록시에 TLS를 사용할 수 있습니다. 프록시 정보를 보안 가상 호스트 구성에 추가해야 합니다.

Apache 2.4용 프록시 설정

이 섹션에서는 가상 호스트를 사용하여 프록시를 구성하는 방법에 대해 설명합니다.

  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. 다음 명령을 입력하여 프록시가 작동하는지 확인합니다.

    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 유틸리티가 설치되어 있는지 확인합니다.

  1. htpasswd이(가) 이미 설치되어 있는지 확인하려면 다음 명령을 입력하십시오.

    code language-bash
    which htpasswd
    

    경로가 표시되면 경로가 설치되고, 명령이 출력을 반환하지 않으면 htpasswd이(가) 설치되지 않습니다.

  2. 필요한 경우 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 서버에 액세스할 수 있는 사용자를 지정하는 방법에 대해 설명합니다.

  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
    • 우분투: service apache2 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 ​을(를) 클릭합니다.

계속하기 전에 캐시를 플러시하고 다시 인덱싱해야 합니다.

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