MeiliSearch와 함께 HTTP/2 및 SSL을 사용하는 방법

MeiliSearch와 함께 HTTP/2 및 SSL을 사용하는 방법

2022-10-04 last update

5 minutes reading meilisearch mkcert certbot ssl
HTTP/2를 사용하려는 경우 서버가 SSL 인증서로 구성된 경우에만 가능하다는 점에 유의하십시오.

따라서 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.pem127.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