そういえば DigitalOcean から Azure へ移行しました。
体感速度も上がったと思います。なんといっても vCPU 1コアでしたから前は…。
今回は新たに構築するっていうことで今まで Nginx を使ってきましたが h2o を使ってみました。
h20 – github
h2o は DeNA を筆頭に多くの日本人で開発されてる HTTP Server です。
HTTP/2 に強いっぽい。何と言っても HTTP Server なのに逆にリクエストが送れたりする。
TOC
h2o のインストール
書くことはありません。こちらを参考にインストールしました。
php-fpm のインストール
好きに入れてください。
h2o の設定
user: h2o pid-file: /var/run/h2o/h2o.pid num-threads: 2 access-log: /var/log/h2o/access.log error-log: /var/log/h2o/error.log http2-reprioritize-blocking-assets: ON max-connections: 1024 compress: on # for index # file.index: [ 'index.php', 'index.html' ] # for PHP # file.custom-handler: extension: .php fastcgi.connect: host: 127.0.0.1 port: 9000 type: tcp hosts: "luispc.com:80": listen: port: 80 paths: "/": redirect: https://104.41.191.21/ "luispc.com:443": listen: port: 443 ssl: certificate-file: /etc/h2o/ssl/ssl-bundle.crt key-file: /etc/h2o/ssl/luispc_com.key paths: "/": file.dir: /var/www/ file.dirlisting: OFF # for Expires # mruby.handler: | Proc.new do |env| headers = {} if /\.(css|js|jpg|jpeg|png|gif)\z/.match(env["PATH_INFO"]) headers["cache-control"] = "max-age=86400" headers["Expires"] = "1d" end [399, headers, []] end # for Permalink # redirect: url: /index.php/ internal: YES status: 307
直感的で分かりやすと思います。
php-fpm との連携は
file.custom-handler: extension: .php fastcgi.connect: host: 127.0.0.1 port: 9000 type: tcp
これだけ。シンプルだ。
WordPress のパーマリンクは
redirect: url: /index.php/ internal: YES status: 307
こんな感じ。
ただ、ログイン時はキャッシュさせないとかパスを見てアクセスコントロールするには mruby とかいうのを使うらしい。
Ruby 分からねえよぉ… ちなみに mruby は ON でビルドしたけどこの設定あってるのか分からねえ。
しかも mruby でキャッシュの設定とかしてなくても勝手に静的コンテンツがキャッシュされてる…。
アクセスコントロールは mruby を使うと柔軟に設定できるわけですが、ちょっとハードルが高いように思う…。
でもまぁ管理画面でヘッダーを見てみるとWordpress側でキャッシュしないようにはなってるっぽいのでここらへんはもう気にしなくてもいいのかな。
ということで設定がよく分からないまま Nginx と比較してみます。
h2o + php-fpm
# wrk -t 7 -c 30 -d 60s http://127.0.0.1/ Running 1m test @ http://127.0.0.1/ 7 threads and 30 connections Thread Stats Avg Stdev Max +/- Stdev Latency 942.35ms 244.24ms 1.95s 81.90% Req/Sec 6.66 5.80 30.00 87.19% 1661 requests in 1.00m, 102.97MB read Socket errors: connect 0, read 0, write 0, timeout 59 Requests/sec: 27.64 Transfer/sec: 1.71MB
27.64req/sec
Nginx(fastcgi_cache) + php-fpm
# wrk -t 7 -c 30 -d 60s http://127.0.0.1/ Running 1m test @ http://127.0.0.1/ 7 threads and 30 connections Thread Stats Avg Stdev Max +/- Stdev Latency 33.80ms 138.93ms 1.80s 96.27% Req/Sec 1.31k 314.62 2.02k 86.42% 509977 requests in 1.00m, 30.67GB read Requests/sec: 8485.62 Transfer/sec: 522.53MB
8485.62req/sec
えぇ…。Nginx の方が 314倍速い!?
https ではなく http です。
画像が多く1アクセスで180reqのWordPressです。
なんでこんなに差が大きすぎるんだ…。なんでや…。
とりあえずこのブログは h2o で動かして色々実験します。