はてなから移行して3ヶ月位ですがサーバー移したので書いておきます。
経緯
ネットオウルのミニバード(月250円!)でWordPressを動かしていました。
激安なレンサバの割には結構まともでいい感じだったのですが、4サイトほど詰め込んだあたりでデータベースが遅いのかレスポンスが急激に落ちてしまいました。
PHP7が速いとかSSL対応した方がいいとかいろいろ聞くので思い切って全部やってみました。
VPS
1GBのVPSで絞りこみました。お名前、さくら、GMOクラウド、ConoHaくらいが候補に上がると思います。
GMOクラウドはコンパネがクソすぎ、さくらはSSDが30GB&日割り不可、お名前はHDD、ということでConoHaです。
ぶっちゃけ美雲このはが可愛いのでConoHaにしました。(ConoHa選ぶ人は一度は思ってるはず…)
ついでに紹介URL置いときます。このリンクから登録すると1000円クーポンもらえるはずです。
構築
ConoHa VPS 1GB
CentOS 7.2(ConoHaで用意されているもの)
諸々の設定は済ませておきます。
nginx
HTTP/2対応のためにnginx1.9.5以降が必要です。公式のリポジトリを使いました。
リポジトリファイルを作っておきます。
# vim /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
一応確認しておきます。
# yum clean all # yum info --enablerepo=nginx nginx Available Packages Name : nginx Arch : x86_64 Epoch : 1 Version : 1.9.10 Release : 1.el7.ngx Size : 608 k Repo : nginx/x86_64 Summary : High performance web server URL : http://nginx.org/ License : 2-clause BSD-like license Description : nginx [engine x] is an HTTP and reverse proxy server, as well as : a mail proxy server.
あとはそのままインストールして大丈夫です。
# yum install --enablerepo=nginx nginx
PHP7.0
自前でビルドするのは面倒だったのでremiリポジトリを使いました。
$ wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm $ sudo rpm -ivh ./remi-release-7.rpm
確認します。
$ ls /etc/yum.repos.d/ CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo nginx.repo remi-safe.repo CentOS-CR.repo CentOS-Media.repo epel.repo remi-php70.repo CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo remi.repo
インストール。
$ sudo yum --enablerepo=epel,remi,remi-php70 install php70
パスを通しておきます。
$ source /opt/remi/php70/enable $ php -v PHP 7.0.2 (cli) (built: Jan 6 2016 15:25:31) ( NTS ) Copyright (c) 1997-2015 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies with Xdebug v2.4.0RC4, Copyright (c) 2002-2016, by Derick Rethans
SSL
巷で話題のLet’s encryptを使いました。
公式とこちらを参考にしました。
実行するといきなり依存関係がインストールされます。注意。
$ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --help Bootstrapping dependencies for RedHat-based OSes... usage: letsencrypt-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ... The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins
早速取得します。
-w
はnginxのドキュメントルートを、-d
はドメインを指定します。
初回実行時にはメールアドレスや利用規約の同意が必要です。
# ./letsencrypt-auto certonly --webroot -w /usr/share/nginx/html -d hoge.hoge.com
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/blog.ayushio.com/fullchain.pem. Your cert will expire on 2016-04-27. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
証明書は/etc/letsencrypt/live
にドメインごとのフォルダに入って置かれます。
nginxの設定はこんな感じでしょうか。
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name hoge.hoge.com; ssl_certificate /etc/letsencrypt/live/hoge.hoge.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/hoge.hoge.com/privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers AESGCM:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; root /usr/share/nginx/html; index index.php # 以下省略
設定ができたらSSLをチェックしてくれるサービスで確認しておくといいと思います。
みたらスコアがBだったので直しておきたい。
HTTP/2
- 事実上SSL(TLS)が必要(Chromeだとhttpsの時のみHTTP/2対応)
- nginxは1.9.5以降が必要
上の設定ファイルに書いてありますがserverのlistenにhttp2
を加えるだけです。
Chromeだと、HTTP/2で通信しているかはプラグインで簡単に確認できます。

右端の稲妻が青だとHTTP/2です。

WordPress
このままだとWordPressのリンクやら色々が非SSLのままです。プラグインなどで対応できるみたいですが面倒なので一気に書き換えてしまいました。
mysqldump
で簡単にmysqlをダンプできます。
mysqldump -uroot -p -hlocalhost database_name > backup.sql
ダンプしたものに入っているhttp://hoge.hoge.comからhttps://hoge.hoge.comに置換します。
vim backup.sql
:%s;http://hoge.hoge.com;https://hoge.hoge.com;gc
置換済みのダンプをリストアします。
mysql -uroot -p -hlocalhost database_name < backup.sql
あとはjsやcss等がSSLで読み込まれているか確認するだけです(ごちゃ混ぜになっているとアドレスバーが緑になりません)。
ChromeだとDeveloperToolsのコンソールやnetworkタブのfilterでmixed-content:displayed
と入力して確認できます。
余談ですがプロトコル部を省略して書くとhttp、httpsどちらでも読み込まれます。(知らなかった…)
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.11.4/jquery-ui.min.js"></script>
最後にnginxでSSLにリダイレクトするようにしました。
server { listen 80; listen [::]:80; server_name hoge.hoge.com; return 301 https://hoge.hoge.com$request_uri; }
結果
PHPは超簡易的にWordPressのクエリの実行速度を見てみました。
CeltisPackというプラグインを使うとhtmlの最後の方にクエリの実行速度が表示されます。
こんな感じのを書いておいてもいいかもしれません。
<?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?>
で、10回読み込んで平均しました。両方共ConoHa 1GB、CentOS7.2です。クエリの数が大体40個位。
nginx1.8.1+php5.4.16 | nginx1.9.10+php7 |
---|---|
0.326 sec | 0.165 sec |
管理画面では体感的に速く感じると思います。
HTTP/2の方はよくわかりませんが並列してガンガン読み込まれているのは確認できました。
とりあえずキャッシュ使わずに高速化できたので満足です。
ではまた。