
MeiliSearch와 함께 HTTP/2 및 SSL을 사용하는 방법
2022-10-04 last update
5 minutes reading meilisearch mkcert certbot sslHTTP/2를 사용하려는 경우 서버가 SSL 인증서로 구성된 경우에만 가능하다는 점에 유의하십시오.
따라서 SSL로 MeiliSearch 서버를 시작하는 방법을 볼 수 있습니다. 이 튜토리얼에서는 로컬에서 수행하는 방법을 간략하게 소개하지만 원격 서버에서도 동일한 작업을 수행할 수 있습니다.
우선 binary of MeiliSearch 가 필요하거나 docker를 사용할 수도 있습니다. 후자의 경우 환경 변수를 사용하여 매개변수를 전달하고 볼륨을 통해 SSL 인증서를 전달해야 합니다.
SSL 인증서를 생성하는 도구도 필요합니다. 이 방법에서는 mkcert 를 사용합니다. 그러나 원격 서버에 있는 경우 certbot 또는 인증 기관에서 서명한 인증서를 사용할 수도 있습니다.
그런 다음
바이너리를 실행하여 시작하십시오.
그런 다음 요청을 보냅니다.
서버에서 다음과 같은 응답을 받습니다.
서버가 HTTP/2로 업그레이드를 시도하지만 실패했음을 온라인
답변
이번에는 SSL 인증서를 생성하여 시작합니다. mkcert는
그런 다음 인증서와 키를 사용하여 SSL로 MeiliSearch를 구성합니다.
그런 다음 위와 동일한 요청을 하지만
서버에서 다음과 같은 응답을 받게 됩니다.
이제 서버가 HTTP/2를 지원하는 것을 볼 수 있습니다.
서버가 HTTP/2 요청을 성공적으로 수신합니다.
따라서 SSL로 MeiliSearch 서버를 시작하는 방법을 볼 수 있습니다. 이 튜토리얼에서는 로컬에서 수행하는 방법을 간략하게 소개하지만 원격 서버에서도 동일한 작업을 수행할 수 있습니다.
우선 binary of MeiliSearch 가 필요하거나 docker를 사용할 수도 있습니다. 후자의 경우 환경 변수를 사용하여 매개변수를 전달하고 볼륨을 통해 SSL 인증서를 전달해야 합니다.
SSL 인증서를 생성하는 도구도 필요합니다. 이 방법에서는 mkcert 를 사용합니다. 그러나 원격 서버에 있는 경우 certbot 또는 인증 기관에서 서명한 인증서를 사용할 수도 있습니다.
그런 다음
curl
를 사용하여 요청을 수행합니다. --http2
옵션을 사용하여 HTTP/2 요청을 보내도록 지정하는 간단한 방법입니다.SSL 없이 HTTP/2를 사용해 보십시오.
바이너리를 실행하여 시작하십시오.
./meilisearch
그런 다음 요청을 보냅니다.
curl -kvs --http2 --request GET 'http://localhost:7700/indexes'
서버에서 다음과 같은 응답을 받습니다.
* Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 7700 failed: Connection refused
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 7700 (#0)
> GET /indexes HTTP/1.1
> Host: localhost:7700
> User-Agent: curl/7.64.1
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
>
< HTTP/1.1 200 OK
< content-length: 2
< content-type: application/json
< date: Fri, 17 Jul 2020 11:01:02 GMT
<
* Connection #0 to host localhost left intact
[]* Closing connection 0
서버가 HTTP/2로 업그레이드를 시도하지만 실패했음을 온라인
> Connection: Upgrade, HTTP2-Settings
에서 볼 수 있습니다.답변
< HTTP/1.1 200 OK
은 서버가 여전히 HTTP/1을 사용하고 있음을 나타냅니다.SSL과 함께 HTTP/2를 사용해 보십시오.
이번에는 SSL 인증서를 생성하여 시작합니다. mkcert는
127.0.0.1.pem
및 127.0.0.1-key.pem
두 파일을 생성합니다.mkcert '127.0.0.1'
그런 다음 인증서와 키를 사용하여 SSL로 MeiliSearch를 구성합니다.
./meilisearch --ssl-cert-path ./127.0.0.1.pem --ssl-key-path ./127.0.0.1-key.pem
그런 다음 위와 동일한 요청을 하지만
http://
를 https://
로 변경합니다.curl -kvs --http2 --request GET 'https://localhost:7700/indexes'
서버에서 다음과 같은 응답을 받게 됩니다.
* Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 7700 failed: Connection refused
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 7700 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: O=mkcert development certificate; [email protected] (Quentin de Quelen)
* start date: Jun 1 00:00:00 2019 GMT
* expire date: Jul 17 10:38:53 2030 GMT
* issuer: O=mkcert development CA; [email protected] (Quentin de Quelen); CN=mkcert [email protected] (Quentin de Quelen)
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7ff601009200)
> GET /indexes HTTP/2
> Host: localhost:7700
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 4294967295)!
< HTTP/2 200
< content-length: 2
< content-type: application/json
< date: Fri, 17 Jul 2020 11:06:27 GMT
<
* Connection #0 to host localhost left intact
[]* Closing connection 0
이제 서버가 HTTP/2를 지원하는 것을 볼 수 있습니다.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
서버가 HTTP/2 요청을 성공적으로 수신합니다.
< HTTP/2 200