Tこの記事では、NginxにSSL証明書をインストールする手順と、HTTP://からHTTPS://への自動リダイレクトを設定する方法を案内します。
1. ウェブサイトがホストされているサーバーに証明書をアップロードする
CSRコードの生成とSSL有効化のステップを完了すると、Sectigo(旧Comodo)の証明書が含まれたzipファイルがメールで届きます。あるいは、NiceNicアカウントパネルからダウンロードすることもできます。
注意: 証明書の有効化時にNGINXサーバーを選択すると、'.crt'拡張子の証明書ファイルと、'.ca-bundle'拡張子の認証局(CA)バンドルファイルを含むzipファイルが届きます。
どちらのファイルもお好きな方法でサーバーにアップロードしてください。例としてFTPクライアントを使う方法があります。
また、各証明書のバンドルファイルをこちらの指示に従ってダウンロードすることも可能です。
2. すべての証明書を一つのファイルに結合する
取得したすべての証明書(あなたの_ドメイン.crt と あなたの_ドメイン.ca-bundle)を一つの '.crt' ファイルにまとめる必要があります。
ドメインの証明書がファイルの最初に来て、その後に証明書チェーン(CAバンドル)が続くようにしてください。
証明書ファイルをアップロードしたディレクトリに入り、以下のコマンドでファイルを結合します:
$ cat あなたの_ドメイン.crt あなたの_ドメイン.ca-bundle >> あなたの_ドメイン_chain.crt
ご注意:証明書ファイルがNiceNicアカウントからダウンロードされた場合、以下のコマンドの方が適切です:
$ cat あなたの_ドメイン.crt > あなたの_ドメイン_chain.crt ; echo >> あなたの_ドメイン_chain.crt ; cat あなたの_ドメイン.ca-bundle >> あなたの_ドメイン_chain.crt
3. Nginxのサーバーブロックを個別に作成するか、既存の設定ファイルを編集する
NginxにSSL証明書をインストールするには、サーバーにどのファイルを使うか示す必要があります。方法は a) 新しい設定ファイルを作成するか、b) 既存のファイルを編集するかのどちらかです。
a) ウェブサイト用の新しい設定ファイルを追加すると、別の設定ファイルに問題がないことを確認できます。また、新設定に問題があった場合のトラブルシューティングも容易です。
以下のフォルダに新しい設定ファイルを作成することをお勧めします:
/etc/nginx/conf.d
以下のコマンドで行えます:
sudo nano /etc/nginx/conf.d/Your_ドメイン*-ssl.conf
ここで Your_ドメイン*-ssl.conf は新しく作成するファイルの名前です。
次に、443ポート用の以下のサーバーブロックのいずれかをコピー&ペーストし、ディレクトリを編集してください。80ポート用のサーバーブロックと同じサーバー名とウェブルートのパスが両方に一致していることを確認します。重要な値が他にある場合は、新しいサーバーブロックにも移動してください。
b) Webサーバーのデフォルト設定ファイル nginx.conf を編集する方法もあります。通常、以下のフォルダのいずれかにあります:
/usr/local/nginx/conf
/etc/nginx
/usr/local/etc/nginx
以下のコマンドでも見つけることができます:
sudo find / -type f -iname "nginx.conf"
見つけたら、次のコマンドでファイルを開きます:
sudo nano nginx.conf
その後、以下の443ポート用サーバーブロックのいずれかをコピー&ペーストし、80ポート用のサーバーブロックに合わせてディレクトリなどを編集します(サーバー名、ウェブルートのパス、必要な重要な値が一致するように)。あるいは、80ポート用のサーバーブロックをコピーして下に貼り付け、ポートを更新して必要なSSL関連のディレクティブを追加しても構いません。
サーバーブロックを選択してください:
以下はあなたのNginxのバージョンに対応したサーバーブロックです。
注意: Nginxのバージョンを確認するには以下のコマンドを実行します:
sudo nginx -v

注意:サーバーブロック内のファイル名の値(例:あなたの_ドメイン_chain.crt)はあなたの環境のものに置き換え、/path/to/を使ってファイルパスを適切に修正してください。
Nginxバージョン1.14および以下用のサーバーブロック:
server {
listen 443;
ssl on;
ssl_certificate /path/to/certificate/あなたの_ドメイン_chain.crt;
ssl_certificate_key /path/to/あなたの_private.key;
root /path/to/webroot;
server_name あなたの_ドメイン.com;
}
注意: 必要に応じて、複数のホスト名をこの設定で指定することができます。例:
server {
listen 443;
ssl on;
ssl_certificate /path/to/certificate/あなたの_ドメイン_chain.crt;
ssl_certificate_key /path/to/あなたの_private.key;
root /path/to/webroot;
server_name あなたの_ドメイン.com www.あなたの_ドメイン.your;
}
Nginxバージョン1.15以降用のサーバーブロック:
server {
listen 443 ssl;
ssl_certificate /path/to/certificate/あなたの_ドメイン_chain.crt;
ssl_certificate_key /path/to/あなたの_private.key;
root /path/to/webroot;
server_name あなたの_ドメイン.com;
}
ssl_certificateは、先ほど作成した結合済み証明書ファイルを指すようにしてください。
ssl_certificate_keyは、CSRコードと共に生成したプライベートキーを指すようにしてください。
Nginx上でプライベートキーの場所を見つけるためのいくつかのヒントを以下に示します。
重要: マルチドメインまたはワイルドカード証明書の場合、証明書に含まれる各ドメイン/サブドメインごとに別々のサーバーブロックを追加する必要があります。該当するドメイン/サブドメインと同じ証明書ファイルのパスをサーバーブロックで指定してください。
対応するサーバーブロックをファイルに追加したら、編集内容を保存してください。その後、以下の手順で変更を再確認できます。
設定ファイルの構文が正しいかを確認するには、以下のコマンドを実行します:
sudo nginx -t

エラーが出た場合は、ガイドに沿って作業したか再度ご確認ください。質問があればサポートチームまでご連絡ください。
ヒント: エラーログを調べるには、以下を実行します:
sudo nginx -T | grep 'errまたは_log'
もし該当ファイルが存在しなかったり、コメントアウトされていたり、エラーログファイルの指定がない場合は、デフォルトのシステムログを確認してください:
tail /var/log/nginx/errまたは.log -n 20
テストが成功したら、以下のコマンドでNginxを再起動し、変更を適用します:
sudo nginx -s reload
これでSSL証明書はインストールされました。インストール状況はここで確認できます。
重要な注意点:
時として、コマンドラインで結合したSSLファイルをインストールした後、『Nginx/Apacheエラー:0906D066:PEM routines:PEM_read_bio:bad end line』というエラーメッセージが出ることがあります。この場合の対処法は参照ガイドに記載されています。
また、この段階でのよくある問題は『Nginx SSL: errまたは:0B080074:x509 certificate routines: X509_check_private_key:key values mismatch』というエラーです。詳細と対処方法はこの記事で説明されています。
4. HTTPSリダイレクトの設定
HTTPからHTTPSへのリダイレクト設定を推奨します。こうすることで、ウェブサイト訪問者は常に安全なバージョンにアクセスできます。
80ポート用サーバーブロックの設定ファイルに1行追加するだけです。
ヒント:
現在有効な設定ファイルを調べるには、次のいずれかのコマンドを使えます:
sudo nginx -T | grep -iw "configuration file"
sudo nginx -T | grep -iw "include"
デフォルトの設定ファイルのパスは以下の通りです:
RHEL系Linux OSの場合:/etc/nginx/conf.d/default.conf
Debian系Linux OSの場合:/etc/nginx/sites-enabled/default
どのファイルに80ポートのサーバーブロックが含まれているか確認するため、ファイルを開きます。次のコマンドを実行してください:
sudo nano name_of_the_file
80ポート(デフォルトのHTTPポート)用のサーバーブロックが含まれるファイルを見つけたら、以下の1行を追加してください:
return 301 https://$server_name$request_uri;
注意: 上記のリダイレクトルールはサーバーブロックの最後の行として入力してください。