nginx + Let’s EncryptでHTTP2(ALPN)を構築

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。kenjiです。

Cent7.3、nginx1.10.2、php-fpm7.1
とインストールをしてきました。
今回はゴール目標であるHTTP2の設定に入っていきます。

SSL証明書が必要になるのですが、SSL証明書は
Let’s Encrypt 製のものを利用します。

Let’s Encryptについては以下のサイトを参考にお願いします
https://letsencrypt.jp/

概要

Cent7.3、nginx1.10.2、php-fpm7.1の環境にてSSLを有効にします。
Let’s Encryptの利用にあたり、独自ドメインが必須となります。

実行環境

Cent7.3
nginx1.10.2
php-fpm7.1
独自ドメイン

インストール方法

インストールをしていくのですが、Let’s Encrypt 自体の動作をさせるにあたり、certbotが必要になります。
こちらをまずはインストールしていきます。

certbotインストール

yumにてcertbotをインストールします
(epelリポジトリは前回のphp-fpmインストール時に利用可能になっています。)

yum install --enablerepo=epel certbot 

certbotにて証明書取得

certbotコマンドが利用可能になったので、certbot経由でSSL証明書を取得します。
※-dに続く部分は利用可能なSSLに利用するドメイン名を入力してください
 ここではtestssl.skyarch.netとします。
 また、ドメイン名には既にAレコードを設定済みのものとします。

certbot certonly --webroot --webroot-path /usr/share/nginx/html -d testssl.skyarch.net

メールアドレスを聞かれた場合は、利用可能なメールアドレスを入力する。
"Congratulations!"が表示されれば正常終了

nginxにssl設定

nginxにSSL設定を実施します。
以下を実行。
※設定するドメインをtestssl.skyarch.netとします。
 実際に利用する場合は読み替えて下さい。

mkdir /etc/nginx/ssl
openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

cat > /etc/nginx/conf.d/ssl.conf << EOF
server {
    listen       443 ssl http2;
    server_name  testssl.skyarch.net;
    ssl_certificate     /etc/letsencrypt/live/testssl.skyarch.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/testssl.skyarch.net/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/testssl.skyarch.net/fullchain.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security max-age=15768000;
    ssl_stapling on;
    ssl_stapling_verify on;


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;

    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
EOT

nginx再起動

nginxのconfを変更しているため、ngixの再起動をする必要がある。
以下のコマンドにてnginxを起動させる

構文チェック
nginx -t
(エラーが無いことを確認)

起動
systemctl restart nginx

起動確認
ps auxfww|grep nginx

動作確認

以下のサイトから動作確認ができます。
https://tools.keycdn.com/http2-test

自ドメインを入力して「test」をクリック
以下のような画面が出れば、正常に設定できています!

http2-result

http2-result

まとめ

いかがでしたでしょうか。
4部に渡り、CentOS7.3、nginx1.10.2、php7.1、SSL設定と実施してきました。
追加でRDSの利用や、mysqlのインストールなどを実施することで、高速かつ安全なwordpress環境の構築も可能になります。
(phpインストール時に既にphp-mysqlをインストール済みです)

CentOS5系で稼働していてリプレースが近い!しかし脆弱性や暗号化が心配、
iOSでアプリ提供しているから、SSL対応を考えないと・・
などなど、ぜひ本件を参考に頂けると嬉しく思います。

より進んだ対応やバーチャルホスト対応、キャッシュ設定、圧縮転送設定なども可能ですので、不明な点あればぜひお気軽にご連絡ください

投稿者プロフィール

kenji

2013年入社の平成生まれです。


初めて触ったコンピュータはPC9821でダイヤルアップでした。

その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、

みなさんのお役に立てればと思っております!

#今では個人所有のパソコン・サーバだけで20台ほどあります…。


サーバー大好き!


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

2013年入社の平成生まれです。

初めて触ったコンピュータはPC9821でダイヤルアップでした。
その時に鯖落ちや人大杉の対応をしてくださる鯖缶になりたいと憧れ、
みなさんのお役に立てればと思っております!
#今では個人所有のパソコン・サーバだけで20台ほどあります…。

サーバー大好き!