CentOS7+nginx+php7+MariaDBでWordPressを再構築したときのメモ

このブログを始めてすぐのことでしたが、引っ越しました。 当サイトはhttpsから始まるSSLを使用したサイトで、サブドメインを使用していました。 しかしHSTS Preload listにはサブドメインのサイトを申請することはできなかったのが理由です。 ついでにAzureではなくCentOSで試しに稼働させてみることにしたので、構築の流れをまとめておきます。前提として、さくらのVPSにてCentOS7を標準インストールしたものとしています。  
HSTS Preload listとは
httpsのサイトをhttpからアクセスしようとしたときに、自動的にhttpsに変えて接続する仕組みのひとつです。 このPreload listに申請して登録され、さらにそのリストを接続する人のブラウザが持っていることが条件です。

CentOS7 初期設定

ユーザー名をdmoritaと仮定して進めます。各環境で置き換えてください。
Shell
// user作成
# useradd dmorita
# passwd dmorita

// rootになれるユーザーを限定
# usermod -G wheel dmorita
# vi /etc/pam.d/su
auth required pam_wheel.so use_uid //コメント解除

// viでvimが開くようにする
# vi ~/.bashrc
alias vi='vim' //エイリアス追加

# source ~/.bashrc

// アップデート
# yum -y update

// ファイアウォール追加
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https

SSHの設定

VPSは自宅のようにポートを塞ぐことができないので、公開鍵認証のみとします。
Shell
# vi /etc/ssh/sshd_config
// 詳細は下記
https://gist.github.com/dmorita/eec5b4c23d92f0e1aea4e3f0cefcee82
Shell
# mkdir -p /home/dmorita/.ssh

# vi /home/dmorita/.ssh/authorized_keys
ssh-dss xxxxx・・・xxxxx //公開鍵

# chmod 700 /home/dmorita/.ssh
# chmod 600 /home/dmorita/.ssh/authorized_keys
# chown dmorita. /home/dmorita/.ssh

// sshd再起動
# systemctl restart sshd
この状態で秘密鍵を使ってログイン可能か、パスワードやrootログインできないようになっているか確認しましょう。

nginx初期設定

Shell
# sudo yum -y install epel-release
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# yum -y install nginx

// 初期のconfigファイルをリネームしてとっておく
# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
# vi /etc/nginx/conf.d/test.conf
//test.confは下記

# mkdir /var/www/html
# vi /var/www/html/index.html
//適当に何か

// nginx有効化
# systemctl enable nginx

// configファイルチェック
# nginx -t

// nginx起動
# systemctl start nginx
server_nameは適宜置き換えてください。
Shell
server {
  listen 80;
  server_name kiyo.space;
  root /var/www;
  index index.php index.html index.htm;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
  }
}
この時点でindex.htmlが表示されるかを確認しましょう。
Shell
// nginxユーザーでSSHアクセスできるようにする場合(VaultPress用)
# usermod -s /bin/bash nginx
# passwd nginx

# systemctl stop nginx
# usermod -d /var/www nginx
# systemctl start nginx

# mkdir -p /var/www/.ssh

# vi /var/www/.ssh/authorized_keys
ssh-dss xxxxx・・・xxxxx //公開鍵

# chmod 700 /var/www/.ssh
# chmod 600 /var/www/.ssh/authorized_keys
# chown dmorita. /var/www/.ssh

phpの設定

Shell
# yum -y --enablerepo=epel,remi,remi-php70 install php php70-php-mbstring php-mbstring php-pear php70-php-fpm php-fpm php70-php-mcrypt php-mcrypt php70-php-mysqlnd php-mysql php70-php-gd php-gd

# vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx

listen = /var/run/php-fpm.sock
listen.owner = nginx
listen.group = nginx

# systemctl enable php-fpm
# systemctl start php-fpm

# php -v
// PHPのバージョンが7であることを確認

# vi /var/www/html/index.php
<?php phpinfo() ?>
index.phpを開いて、phpinfoが表示されることを確認しましょう。

MariaDBの設定

Shell
# vi /etc/yum.repos.d/MariaDB.repo
// バージョンは適宜書きかえること
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# yum -y install mariadb mariadb-server mariadb-client

# systemctl enable mariadb.service
# systemctl start mariadb.service

// 初期設定
# mysql_secure_installation

// WordPress用データベース作成
// データベース名・ユーザー名・パスワードなど適宜置き換えること
# mysql -u root -p
> create database wordpress;
> grant all privileges on wordpress.* to user@localhost identified by 'password';
> quit;
Wordpressの設定
Shell
# cd /var/www/

// 適宜最新バージョンに置き換えること
# wget https://ja.wordpress.org/wordpress-4.7.2-ja.tar.gz
# tar zxvf wordpress-4.7.2-ja.tar.gz

// nginxのホームディレクトリ以下の所有者等をnginxに変更
# cd ..
# chown -R nginx. www

// nginx設定変更
# vi /etc/nginx/conf.d/test.conf
root /var/www/wordpress;

# systemctl restart nginx
Webサーバーにアクセスし、Wordpressの初期設定ができることを確認し、初期設定を済ませましょう。

nginx設定の最適化とSSL設定

Shell
// SSL証明書のファイルを用意しておくこと
# cp /home/dmorita/kiyo.space.pem /etc/nginx/kiyo.space.pem //例
# cp /home/dmorita/kiyo.space.key /etc/nginx/kiyo.space.key //例
# openssl dhparam 4096 -out /etc/nginx/dhparam.pem

# mv /etc/nginx/conf.d/test.conf /etc/nginx/conf.d/test.conf.bak
# mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# vi /etc/nginx/nginx.conf
// 詳細は下記参照

# vi /etc/nginx/conf.d/default.conf
// 詳細は下記参照

# nginx -t
# systemctl restart nginx
https://gist.github.com/18konoe/0bcda2ae25d0e2e8b7e4b23bcc888d62

HTST preload listへの追加とSSL Reportの確認

変なプラグインを入れていなければ、多分この時点でHSTS Preload listへ登録することができると思います。 SSL ReportでもA+がとれるかと思います。

参考になるかもしれないページ

参考 HTTP Strict Transport Security (HSTS) and NGINXNGINX 参考 Strong SSL Security on nginxRaymii.org  

コメントを残す