40
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ConoHa での Nginx + WordPress CentOSでの環境構築メモ

Last updated at Posted at 2014-07-23

このメモは、ConoHa の Nginx + WordPress CentOS というテンプレートを使用する時のメモです。
また、常に更新と修正が行われていきます。

独自ドメインの DNS レコードの設定については触れていません。
各自設定しておくようにお願いします。

テンプレートを利用して VPS を追加

ConoHa には予め WordPress を快適に利用する為のテンプレートが用意されている。
インフラ知識ないし、折角なのでありがたく利用させていただく。
VPS を追加する際 [ テンプレート ] Nginx + WordPress CentOS を選択して VPS を追加する。

全てのファイルをアップデート

何も考えずに取り敢えず最新にしてみる。

$ yum update

ポート番号の設定

IPv4 の設定

$ vi /etc/sysconfig/iptables
$ ggVGd

以下をペースト。

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

変更した設定を適用する。

$ service iptables restart

この節はCentOS に iptables の設定を行う (IPv4)より引用

IPv6 の設定

$ vi /etc/sysconfig/ip6tables
$ ggVGd

以下をペースト。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 546 --sport 547 -s fe80::/10 -d fe80::/10 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited

-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

変更した設定を適用する。

$ service ip6tables restart

この節はCentOS に ip6tables の設定を行う(IPv6)より引用

SSHのポート番号を変更

$ vi /etc/ssh/sshd_config

#Port 22 と記述されている箇所があるので Port 10022 に変更して保存。
変更した設定を適用する。

service sshd restart

この節はCentOS の SSH ポート番号を変更するより引用

phpMyAdmin を更新

最新バージョンがあるか確認

$ yum list | grep phpMyAdmin

最新バージョンがある場合、以下のように表示される。

phpMyAdmin.noarch                       4.2.6-2.el6.remi            remi

最新バージョンがあった場合はインストール。

$ yum --enablerepo=remi install phpmyadmin

Nginx の設定ファイルを追加

phpMyAdmin を動かす為のドメイン設定ファイルを追加

$ vi /etc/nginx/conf.d/phpmyadmin.conf

以下をペーストし、server_name を環境にあわせて書き換える。

server {
    listen      80;
    server_name phpmyadmin.example.com;
    root        /var/www/vhosts/default;
    index       index.html index.htm;
    charset     utf-8;

    include     /etc/nginx/drop;

    # phpMyAdmin
    location /phpMyAdmin {
        alias                /usr/share/phpMyAdmin;
        index                index.php;
        include              /etc/nginx/expires;
        auth_basic           "Local Security";
        auth_basic_user_file "/var/www/vhosts/default/.htpasswd";
    }
    location ~ ^/phpMyAdmin/.+\.php$ {
        alias /usr/share/phpMyAdmin;
        fastcgi_pass   phpfpm;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /usr/share$fastcgi_script_name;
        include        fastcgi_params;
    }
}

.htpasswd ファイルを作成する。

htpasswd -nbs YourName YourPassword > /var/www/vhosts/default/.htpasswd

Nginx をリスタートする。

$ service nginx restart

なお、/etc/nginx/conf.d/default.conf をそのまま使用する場合、/etc/nginx/conf.d/default.conf の 53 行目のコメントアウトを外して、Nginx を再起動するだけで完了です。
Basic 認証を掛ける場合は、auth_basicauth_basic_user_file の部分を追加してください。

MySQL 設定

MySQL の root アカウントを設定

$ mysqladmin -u root password '好きなパスワード'
$ mysql -u root -p mysql
$ DELETE FROM user WHERE user = '';
$ DELETE FROM user WHERE host != 'localhost';

パスワードは、半角英数字 + 大文字英字 + 小文字英字 + 記号で構成するようにする。

Git の削除と最新版のインストール

Git は既にインストールされているが、バージョンが 1.7 であったため一旦削除し最新版をインストールする。

Git の削除

$ yum remove git

最新版の Git のインストール

$ yum install make curl-devel gcc openssl-devel expat-devel  cpan
$ yum install gettext  asciidoc xmlto
$ mkdir /root/temp/
$ cd /root/temp/
$ wget https://www.kernel.org/pub/software/scm/git/git-2.2.1.tar.gz
$ yum install zlib-devel.x86_64
$ tar -zxf git-2.2.1.tar.gz
$ cd ./git-2.2.1
$ make prefix=/usr all
$ make prefix=/usr install
$ rm -rf /root/temp/*

Git コマンドが使えない

いざ Git コマンドを使おうとすると以下のようになる事がある。

$ git --version
-bash: /usr/bin/git: そのようなファイルやディレクトリはありません

この場合、Git がインストールされている場所を探して、その場所をシンボリックリンクで繋げてあげると解決する。

$ which git
/usr/local/bin/git
$ ln -s /usr/local/bin/git /usr/bin/git

ログ監視ツールのインストールと設定

Logwatch をインストール

$ yum install logwatch

動作確認

$ /usr/sbin/logwatch --print

設定を変更

$ vi /usr/share/logwatch/default.conf/logwatch.conf

ログ監視ツール Logwatch を使ってみるを参考に必要な設定を記述する。

この章はVPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定より引用

OS 全体をバックアップするツールのインストールと設定

MondoRescue を導入

$ wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondorescue.repo
$ mv mondorescue.repo /etc/yum.repos.d/
$ yum -y install mondo

圧縮ソフト ( LZO ) をインストール

$ vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
enabled=0
$ yum -y install lzop lzo --enablerepo=dag

バックアップの実行

$ setenforce 0
$ mkdir /tmp/backup/
$ mondoarchive -Oi -L -N -s 4200m -d /tmp/backup -E /tmp/backup
$ setenforce 1

この章はさくらVPS上のOSを丸ごとバックアップするより引用

WordPress に関する設定

Nginx の設定 (不要です)

@wokamoto さんよりフィードバックをいただきました。
以下の ファイルへのアクセス制限 は不要です。
/etc/nginx/conf.d/default.conf 内に include /etc/nginx/drop; という記述があります。
この include /etc/nginx/drop; の中に以下のように書かれています。

location ~ /\. { deny all; access_log /dev/null; log_not_found off; }

※一部抜粋
この記述が ファイルへのアクセス制限 と被る為不要となります。
その他、wp-config.phpwp-blog-header.php にアクセスがあった場合、404 を返すような記述もありました。
include されているファイルもしっかり確認しないとですね!!

ファイルへのアクセス制限 ( 不要です )

/etc/nginx/conf.d/default.conf に以下を追加。

location ~ (\.ht|\.git|\.svn|\.conf) {
    deny  all;
}

Nginx をリスタートする。

$ service nginx restart

ドメインの設定

ConoHa のコントロールパネルにある DNS 逆引き設定で 1 つは設定可能。
以下は、マルチドメイン、サブドメインを設定する場合のサンプル。
※ただし、正しい設定方法かは微妙

追加するドメイン用の設定ファイルを作成

$ cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/example.conf
$ cp /etc/nginx/conf.d/default.backend.conf /etc/nginx/conf.d/example.backend.conf

設定ファイルを編集

example.conf を開く。

$ vi /etc/nginx/conf.d/example.conf

該当部分を以下のように編集。

listen      80;
server_name example.com;
root        /var/www/vhosts/example/;
index       index.html index.htm index.php;
charset     utf-8;

access_log  /var/log/nginx/example.access.log main;
error_log   /var/log/nginx/example.error.log;

example.backend.conf を開く。

$ vi /etc/nginx/conf.d/example.backend.conf

該当部分を以下のように編集。

listen      unix:/var/run/nginx-backend.sock;
server_name example.com;
root        /var/www/vhosts/example/;
index       index.html index.htm index.php;

access_log  /var/log/nginx/example.backend.access.log backend;

Nginx をリスタートする。

$ service nginx restart

これで一応は大丈夫だと思われる。

W3 Total Cache 関連の設定

Java のインストール

# インストール可能な最新バージョンを確認
$ yum search jdk
# インストール
$ yum install java-1.7.0-openjdk-devel.x86_64
# バージョンを確認
$ java -version
# Path を確認
$ which java

YUI Compressor のインストール

# インストール場所へ移動
$ cd /usr/share/
# ダウンロード
$ wget https://github.com/yui/yuicompressor/releases/download/v2.4.8/yuicompressor-2.4.8.jar
# 動作確認
$ java -jar /usr/share/yuicompressor-2.4.8.jar

Nginx の設定ファイルを作成

新規ファイルを作成する。

$ vi /etc/nginx/wp-w3tc

以下をペースト。

# BEGIN W3TC Minify cache
location ~ /wp-content/cache/minify.*\.js$ {
    types {}
    default_type application/x-javascript;
    add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*\.css$ {
    types {}
    default_type text/css;
    add_header Vary "Accept-Encoding";
}
location ~ /wp-content/cache/minify.*js\.gzip$ {
    gzip off;
    types {}
    default_type application/x-javascript;
    add_header Vary "Accept-Encoding";
    add_header Content-Encoding gzip;
}
location ~ /wp-content/cache/minify.*css\.gzip$ {
    gzip off;
    types {}
    default_type text/css;
    add_header Vary "Accept-Encoding";
    add_header Content-Encoding gzip;
}
# END W3TC Minify cache
# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
    add_header Vary "Accept-Encoding, Cookie";
}
location ~ /wp-content/cache/page_enhanced.*gzip$ {
    gzip off;
    types {}
    default_type text/html;
    add_header Vary "Accept-Encoding, Cookie";
    add_header Content-Encoding gzip;
}
# END W3TC Page Cache cache
# BEGIN W3TC Browser Cache
gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
# END W3TC Browser Cache
# BEGIN W3TC Minify core
rewrite ^/wp-content/cache/minify.*/w3tc_rewrite_test$ /wp-content/plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=1 last;
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
    set $w3tc_enc .gzip;
}
if (-f $request_filename$w3tc_enc) {
    rewrite (.*) $1$w3tc_enc break;
}
rewrite ^/wp-content/cache/minify/(.+\.(css|js))$ /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1 last;
# END W3TC Minify core
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
    set $w3tc_rewrite 0;
}
if ($query_string != "") {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
    set $w3tc_rewrite 0;
}
set $w3tc_enc "";
if ($http_accept_encoding ~ gzip) {
    set $w3tc_enc _gzip;
}
set $w3tc_ext "";
if (-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html$w3tc_enc") {
    set $w3tc_ext .html;
}
if (-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.xml$w3tc_enc") {
    set $w3tc_ext .xml;
}
if ($w3tc_ext = "") {
  set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index$w3tc_ext$w3tc_enc" last;
}
# END W3TC Page Cache core

この内容は、W3 Total Cache を利用している場合、ドキュメントルートに nginx.conf というファイルが自動で作られる。その中身を予め作成する作業になる。

参照: (WordPress) W3 Total Cache + Nginx

/etc/nginx/conf.d/default.conf に以下を追加。

include /etc/nginx/wp-w3tc;

Nginx をリスタートする。

$ service nginx restart

WordPress のバックアップ設定

前章で MondoRescue を導入しているので不要!と思うかもしれないが、備えあれば憂いなし!
WordPess のバックアップファイルを単体で使う可能性 ( サーバーの引っ越しなど ) も考慮。

バックアップ方法その 1 - BackWPup を設定

以下サイトを参考に設定する。

バックアップ方法その 2 - VaultPress を設定

こちらは BackWPup とは異なり有料 ( 1ヶ月 500円程度 ) です。
VaultPress を設定後は BackWPup と同じく自動でバックアップを作成。
バックアップからリストアする時は VaultPress の管理画面でボタンをワンクリックで終わり。 ( だったはず…記憶が曖昧です )
以下サイトを参考に設定。
*ワンコイン程でWordPressを毎日自動バックアップ。VaultPressを導入してみた。

管理画面に Basic 認証を設定

設定が面倒なのでプラグインにお願いしちゃいましょう ( 要動作テスト )。

40
37
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?