お名前.com VPSへ移転 その11: WordPress引越し前の準備2

工事現場

前回はお名前.com VPSにインストールしたDebian jessieでWordPressに必要なパッケージをインストールしました。

今回はそれらのパッケージの設定を行って、使えるようにしておきます。

アクセス制限の実施

完成するまでは自分のPC以外ではアクセスできないように制限しておきます。

sudo iptables -I INPUT -p tcp -d AAA.AAA.AAA.AAA -s BBB.BBB.BBB.BBB --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -d AAA.AAA.AAA.AAA -s BBB.BBB.BBB.BBB --dport 443 -j ACCEPT

「AAA.AAA.AAA.AAA」はVPSのIPアドレスで、「BBB.BBB.BBB.BBB」は接続テストに使う自分のPCです

SSL用の自己証明書の用意

WordPressの管理画面に接続するためにはSSLを使用します。SSLを使用するためにはサーバ証明書が必要なのですが、証明書を入手するにはお金と手間がかかります(最近は無料なものもあるそうです)。

WordPressの管理画面は自分専用なのでとりあえず自分で作成した証明書(自己証明書、オレオレ証明書)を用意します。

自己証明書の作成については下記の記事を参照してください。

今回はWordPressの管理画面にログインする際にSSLを使えるようにします。SSLを使えるようにするためには自己署名証明書(オレオレ証明書)を作成してセットアップする必要があります。

さらに自己証明書だとブラウザに拒否されてしまう可能性があるので、証明書をブラウザにインポートしておいた方がよいでしょう。

今回はオレオレ証明書を使ってhttps接続(SSL)を行っているサイトに接続した際に警告が出ないようにする方法を紹介します。自分で管理しているサーバならばこのような手段で警告が出ないようにしておいた方が何かと操作性がよいので、オレオレ証明書を使っている方はぜひやっておきましょう。
実はDebianをインストールするとsnakeoilと呼ばれる証明書がデフォルトで用意されます。自分で証明書を作るのが面倒な場合は、snakeoilの証明書と秘密鍵(/etc/ssl/cert/ssl-cert-snakeoil.pemと/etc/ssl/private/ssl-cert-snakeoil.key)を使えばよいでしょう。

データ用ディレクトリの用意

お名前.com VPSをデフォルトのままLinuxをインストールするとディスクが20GBと180GBに分割され、20GBを「/」に、180GBを「/data」に使おうとすると思います(インストールするOSによって違う可能性あり)。

WordPressでアップロードしたブログの画像などはこの180GBのほうに格納したいのですが、私はこれまでWordPressのデータは「/www」に格納していました。そこで「/data/www」というディレクトリを作り、「/www」でアクセスできるようにします。

また、この/wwwについては所有者をwww-data、所有グループをwww-dataとしておきます。

sudo mkdir /www
sudo chown www-data.www-data /www/
sudo mkdir /data/www
sudo chown www-data.www-data /data/www
sudo mount -t none -o bind /data/www /www

これで「/data/www」と「/www」の実態が同じものとなります。うまくいったら/etc/fstabに次の行を追加しておきましょう。

/data/www   /www    none   bind   0  0

phpmyadminの設定

WordPressのデータベースを操作する際にphpmyadminを利用する可能性があるので、phpmyadminを使えるようにしておきます。

このためには/etc/nginx/sites-availableに次の内容のファイルを作成します。NNN.NNN.NNN.NNNはこのVPSのIPアドレスです。

server {
    # AAA.AAA.AAA.AAAに対するポート10443への接続を処理する
    listen 10443 ssl;
    server_name AAA.AAA.AAA.AAA;

    # コンテンツがあるローカルのトップディレクトリの設定
    root /usr/share/phpmyadmin;
    # URIにファイルの指定がない場合にはindex.htmlかindex.htmを表示
    index index.php;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log /var/log/nginx/phpmyadmin-error.log warn;
    access_log /var/log/nginx/phpmyadmin-access.log combined;

    # 共通の制限事項を設定
    include snippets/restrictions.conf;

    # SSLを有効にする
    ssl on;
    ssl_certificate     作成した証明書 あるいは /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key 作成した秘密鍵 あるいは /etc/ssl/private/ssl-cert-snakeoil.key;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

このファイルから読み込んでいるrestrictions.confは次の内容で/etc/nginx/snippetsに作成しておきます。

# GET|HEAD|POSTメソッドのみアクセスを許可する
# (DELETE, SEARCH等はアクセス拒否)
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
}

# favicon.icoへのアクセスはログに記録しない
location /favicon.ico {
    log_not_found off;
    access_log off;
}

# robots.txtへのアクセスはログに記録しない
location /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

# 「.」で始まるファイル(.htaccess, .htpasswd等)へのアクセスは拒否しない
# ログは記録しておく
location ~ /\. {
    deny all;
}

# アップロード用ディレクトリ内のphpファイルへのアクセスは拒否する
# この設定はサブディレクトリもチェックするので、マルチサイト設定でも有効
# ログは記録しておく
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

# バッファオーバフローを避けるため、上限を設定。
# 参考: http://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html
client_body_buffer_size  32K;
client_header_buffer_size 4k;
client_max_body_size 25M;
large_client_header_buffers 4 16k;

今回はphpmyadminのポート番号を10443にしたので、10443に接続テストに使うPCからアクセスできるようにします。

sudo iptables -I INPUT -p tcp -d AAA.AAA.AAA.AAA -s BBB.BBB.BBB.BBB --dport 10443 -j ACCEPT

「AAA.AAA.AAA.AAA」はVPSのIPアドレスで、「BBB.BBB.BBB.BBB」は接続テストに使う自分のPCです。

最後にphpmyadminの設定を有効にしてNginxに読み込ませます。

sudo ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enables
sudo service nginx reload

これでIPアドレスBBB.BBB.BBB.BBBのPCのブラウザに「https://AAA.AAA.AAA.AAA:10443/」と入力すると、phpmyadminの画面が表示されるはずです。

なお、すべての設定が終わったらphpmyadminは無効にすべきです。その場合は/etc/nginx/sites-enabled/にあるphpmyadminを削除して、「service nginx reload」を実行すればOKです。

まとめ

今回はWordPressの移設先にインストールした各種パッケージの初期設定を行いました。

これでNginxとphpmyadminが使えるようになったので、あとはWordPressのファイルを設置すれば動くはずです。WordPressの移設までもう一息です。

次回はWordPressのファイル類を移動させます。