WordPressのベストな環境
高負荷に耐え、安いという観点でのベストなWordPress構成はさくらのクラウド(ウェブアクセラレータ) + AmazonLightsailという結論が自分の中で出た。
※このブログを勉強のためIaaSで運用している。勉強という観点を除けばQiitaのようなSaaSがベストかも。
価格詳細
さくらのクラウド(ウェブアクセラレータ)
・アウトバウンドトラフィックが5円/1GiB(税込)。そして最初の500GiB分が無償。
例えばAWSであれば日本リージョンのアウトバウンドトラフィックが0.114USD/1GBのため半額以下となっている。
AmazonLightsail
・1vCPUメモリ1GBで記憶域は40GBのSSD。通信量2TBまで無料で月額$5。
・通信料は2TBを超えると、EC2と同じ金額(0.114USD/1GB)かかるが、CDNをフロントにおくため超えることはないはず。
・他のIaaSでも金額はほぼ変わらないが、使ってみたかったためAmazonLightsailを選択した。
AWS Lightsail 設定概要
WordPressインストールなど細かい部分は割愛する。
インスタンス構築
ブラウザ経由でSSHすること可能。sshdを止めたり22番ポートを停止するともちろんSSHできない。
さくらのウェブアクセラレータとの通信は暗号化するため、HTTPSポートを公開する。
OS初期設定とソフトインストール
# hostnamectl set-hostname tech # apt install language-pack-ja # update-locale LANG=ja_JP.UTF-8 # timedatectl set-timezone Asia/Tokyo # apt install nginx php-fpm php-gd php-mysql php-mysqlnd mariadb-server phpmyadmin nkf lv
OSセキュリティ設定
・パッケージを最新にして、利用しないポートは公開しない
・SecurityGroupのようにGUIでFWの設定ができないため、サーバのFWで防御する必要がある
22は自宅のみ、80はLet’s Encrypt、443はさくらのウェブアクセラレーターからしかアクセスできないようにした。
# apt update # apt upgrade # ufw enable # ufw default deny # ufw allow from [自宅IPアドレス] to any port 22 # ufw allow from 66.133.109.36 to any port 80 # ufw allow from 64.78.149.164 to any port 80 # ufw allow from 133.167.4.0/24 to any port 443 # ufw allow from 153.121.0.0/24 to any port 443 # ufw reload # ufw status verbose 状態: アクティブ ロギング: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) 新しいプロファイル: skip To Action From -- ------ ---- 22 ALLOW IN [自宅IPアドレス] 80 ALLOW IN 66.133.109.36 80 ALLOW IN 64.78.149.164 443 ALLOW IN 133.167.4.0/24 443 ALLOW IN 153.121.0.0/24
OS節約設定
・不要(だと思った)プロセスを停止し、OOM Killer対策としてスワップを追加しておく。
### Alt+ファンクションキーでバーチャルターミナルを起動させるデーモン # systemctl disable autovt@.service ### LVM2のミラーデバイスを管理する # systemctl disable blk-availability.service # systemctl disable apparmor.service # systemctl disable iscsi.service # systemctl disable open-iscsi.service # systemctl disable lvm2-monitor.service # systemctl disable rsync.service ### クロック制御(負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる) # systemctl disable ondemand.service ### 自動アップデートは無効にする # systemctl disable unattended-upgrades.service # mkdir /var/swap # dd if=/dev/zero of=/var/swap/swap.img bs=1M count=4096 # chmod 600 /var/swap/swap.img # mkswap /var/swap/swap.img # swapon /var/swap/swap.img # vi /etc/fstab /var/swap/swap.img swap swap defaults 0 0
Nginx
特徴的な設定として
・wp-admin配下などは自宅からしかアクセスできないようにしている。
・フロントにさくらのウェブアクセラレーターを導入するため、以下2点を設定している。
・real_ipモジュールを利用してクライアントIPアドレスを取得できるように
・キャッシュしたいコンテンツにadd_header Cache-Control “s-maxage=***, public”を設定
# diff nginx.conf nginx.conf.default < ## < # Proxy < ## < < set_real_ip_from 133.167.4.0/24; < set_real_ip_from 153.121.0.0/24; < real_ip_header X-Forwarded-For; < real_ip_recursive on; < < ## < # アクセス制限 < ## < map_hash_bucket_size 128; < include /etc/nginx/accessctl/ALLOW_PRIVATE; # cat /etc/nginx/accessctl/ALLOW_PRIVATE geo $allow_private { default 0; 10.0.0.0/8 1; 172.16.0.0/12 1; 192.168.0.0/16 1; 127.0.0.1 1; [自宅IPアドレス] 1; } # cat /etc/nginx/akat.conf.d/security.wordpress.ip.conf location ~ wp-login\.php$|wp-config\.php$|/wp-admin { set $allow_f_private 0; if ( $allow_private = 1 ) { set $allow_f_private 1; } if ( $allow_f_private = 0 ) { return 403; } location ~ \.php$ { set $allow_f_private 0; if ( $allow_private = 1 ) { set $allow_f_private 1; } if ( $allow_f_private = 0 ) { return 403; } include fastcgi_params; } } # cat /etc/nginx/sites-enabled/tech.akat.info_ssl server { ### SSL証明書設定 ### ssl on; ssl_certificate /etc/letsencrypt/live/tech.akat.info/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/tech.akat.info/privkey.pem; # managed by Certbot # SSLのセッションタイムアウトを利用する ssl_session_timeout 1d; # 使うべきプロトコルを指定する ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # SSLエンジンが利用する暗号法を設定する ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; # サーバの暗号化をクライアントよりも優先すべきかどうか指定する ssl_prefer_server_ciphers on; ### 基本設定 ### listen 443; ## listen for ipv4; this line is default and implied server_name tech.akat.info; root /var/www/akat.info/tech/htdocs; index index.html index.php; client_max_body_size 20M; ### ホスト設定(違うホスト名からアクセスがあったときはエラーに) ### if ( $host != $server_name ) { return 400; } ### conf ### include /etc/nginx/akat.conf.d/security.wordpress.ip.conf; ### log設定 ### if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; } access_log /var/www/akat.info/tech/log/$year-$month-$day-access.log; error_log /var/www/akat.info/tech/log/error.log; ### WordPress用設定 ### location / { try_files $uri $uri/ /index.php; } ### さくらのウェブアクセラレータ ### location ~* \.(gif|jpeg|png|ico|css|js|html)$ { expires 1d; add_header Cache-Control "s-maxage=432000, public"; } location ~* ^/wp-content/ { expires 1d; add_header Cache-Control "s-maxage=432000, public"; } ### PHP用設定 ### location ~ \.php$ { include fastcgi_params; fastcgi_send_timeout 180; fastcgi_read_timeout 180; } }
さくらのウェブアクセラレーター設定概要
以下の2つを参考に設定した。こちらも概要だけ記載する。
https://help.sakura.ad.jp/hc/ja/articles/115000035961
https://knowledge.sakura.ad.jp/5983/
設定後は無効となっており、DNS設定を実施して初めて有効となる。
参考
https://qiita.com/tailak/items/77b90a4df07e4f6a1fc2
https://qiita.com/RyoMa_0923/items/681f86196997bea236f0
https://qiita.com/RentalCat__/items/862d0ec075e97ae52b52
https://server-setting.info/ubuntu/first-setting-ubuntu-server.html
https://qiita.com/kitsuyui/items/11b4c0ebb9d1d2181853
https://qiita.com/pinohara/items/481c95dc4c8c2568bf8d
https://qiita.com/yakumo3/items/dc38a9b6c19194a88922
https://ja.wordpress.org/support/topic/syntaxhighlighter-evolved%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%82%92%E7%9B%B4%E3%81%99%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84/