CentOS7にwordpressを入れることがあったのでメモ
nginx + php-fpm + mysqlで、fastcgi cacheの設定もします。
mysqlのインストールは今回はスキップして、別ホストのデータベースを利用しています。
phpインストール
php-fpmと関連モジュールのインストール
$ sudo yum -y install php-mysql php php-gd php-mbstring php-fpm
php-fpmの設定
/etc/php-fpm.d/www.conf
を編集
使用するポート、許可するクライント、ユーザ名、グループ名の設定
最大プロセス数を10、起動時プロセス数5、アイドル状態のプロセス数の最小値3、
アイドル状態のプロセス数の最大値8、500リクエスト受け取るとプロセス再起動
(TCP/IPではなく、Unix Socketを使ってもいいかも)
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 500
nginxユーザの追加
$ cat /etc/passwd|grep nginx
でnginxユーザがあるかどうかチェック
あればこの項目はスキップ
$ sudo addgroup nginx
$ sudo useradd -s /usr/sbin/nologin -g nginx -d /var/www -c nginx nginx
サービスの起動、自動起動設定
$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service
$ sudo systemctl list-unit-files |grep php-fpm
データベースの設定
DBサーバーにて、wordpress_user
というユーザを作成、wordpress_db
というデータベースを作成
ホストの部分は自分の環境に合わせて変更してください。
$ ssh db
$ mysql -u root -p
> CREATE USER 'wordpress_user'@'192.168.1.%' IDENTIFIED BY 'ぱすわーど';
> CREATE DATABASE wordpress_db;
> GRANT ALL ON wordpress_db.* TO wordpress_user;
> FLUSH PRIVILEGES;
> quit
$ exit
nginxのインストール
Nginxリポジトリとnginxをインストールする
$ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ sudo yum -y install nginx
nginxの設定
/etc/nginx/nginx.conf
を編集
ユーザー、グループをnginx
に、worker_processes
を2に、アップロードサイズを10MBに
(ここも自分の環境とかに合わせて任意で)
user nginx nginx;
worker_processes 2;
client_max_body_size 10M;
wordpress用のnginxの設定
/etc/nginx/conf.d/wordpress.conf
を作成
ポート、ホスト名、パス、ログ、PHPの設定
ファイルが存在しないURIの場合は、index.phpへ転送
server {
listen 80;
server_name www.example.com;
root /var/www/html/wp;
index index.php
access_log /var/log/nginx/wordpress.access.log warn;
error_log /var/log/nginx/wordpress.error.log warn;
try_files $uri $uri/ /index.php?q=$uri&$args;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
nginx起動
apache停止
$ sudo systemctl stop httpd.service
$ sudo systemctl disable httpd.service
nginx起動
$ sudo systemctl start nginx.service
$ sudo systemctl enable nginx.service
$ sudo systemctl list-unit-files |grep nginx
firewall設定
--permanent
を付けないと再起動時に元に戻るので注意
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
wordpressの配置
/var/www/html/wp
にwordpressのフォルダを設置
この工程は省略
フォルダの所有者、パーミッションを変更
$ sudo chown -R nginx: /var/www/html/wp
$ cd /var/www/html/wp
$ sudo find . -type f -exec chmod 644 {} +
$ sudo find . -type d -exec chmod 755 {} +
semanage
をインストールし、SELinuxでの書き込み権限付与
$ sudo yum -y install policycoreutils-python
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wp(/.*)?"
$ sudo restorecon -R -v /var/www/html/wp
httpd_can_network_connectを有効に
これが無効だとデータベースに接続できない
$ sudo setsebool -P httpd_can_network_connect 1
$ getsebool httpd_can_network_connect
キャッシュの設定
/etc/nginx/nginx.conf
のhttpの中に以下を追記
fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=wp-key:15m inactive=7d max_size=1000m;
/etc/nginx/conf.d/wordpress.conf
のtry_files
の下辺りに追記
# fastcgi cacheのフラグ
set $do_not_cache 0;
# POST中の場合
if ($request_method != "GET") {
set $do_not_cache 1;
}
# WordPressにログイン中、コメント中、記事作成中
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}
# モバイル系の場合
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Mobile ?
if ($http_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*) {
set $do_not_cache 1;
}
# -- Mobile ?
if ($http_user_agent ~ ^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) {
set $do_not_cache 1;
}
/etc/nginx/conf.d/wordpress.conf
のinclude fastcgi_params;
の下辺りに追記
fastcgi_cache wp-key;
fastcgi_cache_key $scheme://$host$request_uri;
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;
fastcgi_no_cache $do_not_cache;
fastcgi_cache_bypass $do_not_cache;
フォルダの作成、権限の変更
$ sudo mkdir -p /var/cache/nginx/cache
$ sudo chown -R nginx:nginx /var/cache/nginx/cache
nginx反映
$ sudo systemctl start nginx.service