NginxでSSL/TLSを設定しHTTPS通信を有効にする方法

HTTPプロトコルは平文でデータを送受信するため、通信内容の盗聴や改ざんのリスクが伴います。一方、HTTPSはSSL/TLSプロトコルを用いて通信を暗号化し、サーバー認証とデータの保護を実現します。Webサーバーとして広く利用されているNginxでHTTPSを有効にするには、SSL証明書の適切な設定が必要です。

SSL証明書の準備と配置

認証局(CA)から発行されたSSL証明書を取得します。取得後、証明書ファイル(例: server_cert.pem)と秘密鍵ファイル(例: server_key.pem)の2つをNginxがアクセス可能なディレクトリに配置します。ここでは例として /etc/nginx/ssl/ ディレクトリを作成して保存します。

NginxのSSLモジュール確認

設定を進める前に、現在稼働しているNginxがSSL機能をサポートしているか確認します。ターミナルで以下のコマンドを実行します。

nginx -V

出力結果の中に --with-http_ssl_module が含まれていれば、SSLモジュールが有効になっています。含まれていない場合は、後述の「SSLモジュールの追加手順」に従ってNginxを再コンパイルしてください。

Nginxの設定ファイル編集

Nginxの設定ファイル(通常は /etc/nginx/nginx.conf または conf.d 配下のファイル)を開き、HTTPS通信用のサーバーブロックを追加または修正します。リッスンポートを443に指定し、証明書のパスを記述します。

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate     /etc/nginx/ssl/server_cert.pem;
    ssl_certificate_key /etc/nginx/ssl/server_key.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;

    # その他の必要な設定...
}

設定ファイルの記述が完了したら、構文チェックを行い、問題なければNginxをリロードして設定を反映させます。

nginx -t && nginx -s reload

SSLモジュールの追加手順(再コンパイル)

SSLモジュールが含まれていないNginxで ssl_certificate ディレクティブを使用すると、unknown directive "ssl_certificate" というエラーが発生します。この場合、既存の設定を維持したままモジュールを追加して再コンパイルする必要があります。

  1. Nginxのソースコードを展開したディレクトリに移動します。
  2. 以下のコマンドを実行し、SSLモジュールを含めるよう設定します。
    ./configure --with-http_ssl_module
    
  3. コンパイルを実行します。この時、既存の設定ファイルを上書きしないよう make install は実行しないでください。
    make
    
  4. コンパイルが完了すると、objs ディレクトリ配下に新しい実行ファイル nginx が生成されます。現在の実行ファイルをバックアップした後、新しく生成されたものに置き換えます。
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    cp objs/nginx /usr/local/nginx/sbin/nginx
    

実行ファイルの置き換え後は、再度Nginxの設定ファイル編集に戻り、SSL証明書の設定を行ってください。

タグ: nginx SSL HTTPS tls Certificate

6月18日 18:55 投稿