LoginSignup
12
12

More than 5 years have passed since last update.

nginxでhttp2(1)

Last updated at Posted at 2015-10-26

関連記事:

実はよくわかってないHTTP/2

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪


------------------- ↓ 余談はここから ↓-------------------
nginScriptはさておき、
今後主流になっていくであろうhttp2に対応させてみようと思う。

SPDYの頃から概要は知っても、
提供する側でも使う側でも触れる機会がなかったので、
メリットデメリットについてそれほどわかってない。

ただ、とりあえず対応ぐらいでもメリットはありそうなので、
動かして確認ぐらいはしておこうと思う。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪


------------------- ↓ 本題はここから ↓-------------------

nginxをHTTP/2対応にする

例によってインストールから始めている適宜すっ飛ばして読んで欲しい。

nginxインストール

準備

sudo apt-get install build-essential # ビルド全般ツール
sudo apt-get install zlib1g-dev      # zlibライブラリ(nginxのビルドで必要)
sudo apt-get install libssl-dev      # SSLライブラリ(nginxのビルドで必要)
sudo apt-get install libpcre3-dev    # PCREライブラリ(nginxのビルドで必要)

省略形

sudo apt-get install build-essential zlib1g-dev libssl-dev libpcre3-dev

ビルド

nginxの1.9.5でHTTP/2をサポートするというアナウンスがされた。
https://www.nginx.com/blog/http2-r7/
ただ、デフォルトではインストールされないので、
ビルドオプションに付け加える必要がある。

wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar xvfz nginx-1.9.5.tar.gz
cd nginx-1.9.5
./configure --pid-path=/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --with-http_v2_module 
make
sudo make install
cd ..

起動確認

sudo /usr/local/nginx/sbin/nginx # 起動
sudo /usr/local/nginx/sbin/nginx -s quit # 終了

SSLの設定

HTTP/2はSSL必須なので証明書も設置しておく

証明書生成

openssl req -new -nodes -keyout cert.key -out cert.csr -subj "/C=JP/ST=/L=/O=/CN=www.ext.com"
openssl x509 -in cert.csr -out cert.pem -req -signkey cert.key -days 3650
sudo mv cert.* /usr/local/nginx/conf/

設定ファイル調整

SSL周りのコメントアウトを外す

/usr/local/nginx/conf/nginx.conf
    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5;   # ←ちょっと変えてます
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

設定を反映

sudo /usr/local/nginx/sbin/nginx -t # 設定変更確認
sudo /usr/local/nginx/sbin/nginx -s quit # 終了
sudo /usr/local/nginx/sbin/nginx # 起動

HTTP/2有効化

起動ができたので設定を調整してHTTP/2を有効にする。

/usr/local/nginx/conf/nginx.conf
    # HTTPS server
    #
    server {
        listen       443 ssl http2;
        ・・・
    }

設定を反映

sudo /usr/local/nginx/sbin/nginx -t # 設定変更確認
sudo /usr/local/nginx/sbin/nginx -s quit # 終了
sudo /usr/local/nginx/sbin/nginx # 起動

http2の確認

アクセスログで確認

ChromeとIEで同じURLにアクセスするとログに記録されるHTTPプロトコルが違うことがわかる

192.168.56.1 - - [01/Oct/2015:12:42:53 +0900] "GET /index.html HTTP/1.1" ← IE
192.168.56.1 - - [01/Oct/2015:12:40:53 +0900] "GET /index.html HTTP/2.0" ← Chrome

生ログ

# IEからのアクセス
192.168.56.1 - - [01/Oct/2015:12:42:53 +0900] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
# Chromeからのアクセス
192.168.56.1 - - [01/Oct/2015:12:40:53 +0900] "GET /index.html HTTP/2.0" 200 755 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Kinza/2.6.0"

chromeプラグインで確認

対応確認はChromeの拡張機能HTTP/2 and SPDY indicatorでやる
右上の稲妻マークに色がついていたら対応してるとのこと。

nginx06.PNG

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪


------------------- ↓ 補足はここから ↓-------------------

自動起動

systemdに登録してOS起動時にnginxも起動するようにする。
参考: https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

serivceファイルの登録

/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

自動起動有効

$ sudo systemctl daemon-reload    # serviceファイル再読み込み
$ sudo systemctl enable nginx     # 自動起動登録

serviceコマンド

$ sudo service nginx start        # サービス手動起動
$ sudo service nginx stop         # サービス手動停止
$ sudo service nginx restart      # サービス再起動
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12