コンテンツにスキップ

2. TLS終端

ここではrpxyでのTLS終端の方法を説明します。既存のTLS証明書と秘密鍵の指定方法、および平文HTTPリクエストをHTTPSにリダイレクトする方法を示します。

ACME (Let’s Encrypt)との連携については高度な使い方セクションで説明しています。

まず、設定ファイルでHTTPポート(listen_port)とは別に、HTTPSトラフィックをリッスンするポートlisten_port_tlsを指定する必要があります。

listen_port = 80
listen_port_tls = 443

既存のTLS証明書の使用

PEM形式のTLS証明書と秘密鍵があり、HTTPSトラフィックの提供に使用したい場合、PEMファイルでTLS証明書と秘密鍵を指定するだけで、希望するアプリケーションのHTTPSエンドポイントを簡単に設定できます。

listen_port = 80
listen_port_tls = 443

[apps."app_name"]
server_name = 'app1.example.com'
tls = { tls_cert_path = 'server.crt',  tls_cert_key_path = 'server.key' }
reverse_proxy = [{ upstream = [{ location = 'app1.local:8080' }] }]

上記の設定では、ポート80への平文HTTPリクエストとポート443への暗号化HTTPSリクエストの両方が、同じ方法でバックエンドapp1.local:8080にルーティングされます。平文リクエストを提供する必要がない場合は、listen_port = 80を削除してlisten_port_tls = 443のみを指定してください。

tls_cert_key_pathで指定する秘密鍵はPKCS8形式である必要があります。(PKCS1形式の秘密鍵をPKCS8に変換するにはTIPSを参照してください。)

平文HTTPリクエストのHTTPSリダイレクト

現在のWebでは、HTTPではなくHTTPSですべてを提供するのが一般的であり、HTTPリクエストに対するHTTPSリダイレクトがよく使用されます。listen_portlisten_port_tlsの両方を指定している場合、https_redirectionをtrueにすることでリダイレクトオプションを有効にできます。

tls = { https_redirection = true, tls_cert_path = 'server.crt', tls_cert_key_path = 'server.key' }

trueの場合、rpxyは平文リクエストに対してステータスコード301を返し、TLS経由で提供される新しいロケーションhttps://<requested_host>/<requested_query_and_path>にリダイレクトします。