Help us understand the problem. What is going on with this article?

nginxでhttp2を試してみる

More than 3 years have passed since last update.

Geek Woman の Advent Calendar 12日目としてこの記事を書いています。
ほそぼそと情報収集を去年(2014/夏)くらいからしていたのですが、RFCも決まり、
そろそろサービスにも使いたい!と思い、具体的に検証しようと思ったのがこちらを書くきっかけです。
nginxでhttp2を試してみます。
http/2は色々な方が書かれているので、幾つか試してみて、安定性、運用のし易さ、メンテナンス間隔
で選ぼうと思います。後にh2o,nghttp2について検証した内容も書く予定でいます。
環境:MacOS 10.11
vagrant 1.7.4
vagrantでCentOS7.1を用意する。
CentOS7.1

#vagrant box add centos7.1            https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
#vagrant init centos7.1

vagrantfileを編集

config.vm.define :wb01 do |wb01|
wb01.vm.box = "centos7.1"
wb01.vm.hostname = "wb01"
wb01.vm.network :private_network, ip: "192.168.22.40"
end

#vagrant up

nginxは1.9.5からhttp2をサポートしています。
https://www.nginx.com/blog/nginx-1-9-5/#gs.BUI5Z3Q

今回はソースで現在最新の1.9.7を以下の場所から取得します。
デフォルトでは入らないとあるので、--with-http_v2_moduleをオプションで付けます。

#wget http://nginx.org/download/nginx-1.9.7.tar.gz
#tar zxvf nginx-1.9.7.tar.gz
#cd nginx-1.9.7
#./configure --with-http_ssl_module --with-http_v2_module --with-debug --without-http_rewrite_module
#make
#make install

サービスの登録をします。

#cd /usr/lib/systemd/system/
#touch nginx.service
#vi nginx.service

内容は公式にfedora対応であります。こちらを環境に合わせて書き直します。
公式:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

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=/usr/local/nginx/logs/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

http/2対応で自己証明書を作成します。
#openssl genrsa 2048 > server.key
#openssl req -new -key server.key > server.csr
#openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

http2対応
/usr/local/nginx/conf/nginx.confに以下追記します。

nginx.conf
server {
    listen       443 ssl http2;
    server_name  localhost;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

リンクを貼り、サービスを登録します。
#ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
#systemctl enable nginx

公文チェックをして起動します。
#/usr/local/nginx/sbin/nginx -t
#systemctl start nginx

動いていることを確認します。
#ps ax |grep nginx
969 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx
973 ? S 0:00 nginx: worker process
3573 pts/0 S+ 0:00 grep --color=auto nginx

ブラウザからHTTP/2 and SPDY indicatorを使ってhttp/2が有効か確認します。
chromeブラウザを使っています。
上のvagrantファイルで設定した、IPでアクセスします。
最初は自己証明書なので、安全でない接続と出ますが、そのまま進みます。
スクリーンショット 2015-12-12 0.04.10.png

インジケータが青くなってhttp/2が有効なことが確認できました!
簡単な設定で有効にできるので、使っていきたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away