Cookie が無効になっていて MediaWiki にログインできないって言われた件

結論

セッションディレクトリが書込みできませんでした。

エラーメッセージ

ログインのエラー 
example wikiではログインに Cookie を使用します。 Cookie を無効にしているようです。 Cookie を有効にしてから、もう一度試してください。

当方の環境

  • さくらのVPS
  • CentOS7.2.1511 x86_64
  • Nginx + php-fpm
  • PHP 5.4

調べたこと

  • ログにも大したこと書いてない。
  • Cookie は無効になってない。
  • シークレットモードでやってみたけど同じ。
  • Cookie 消してみたけど変わらない。
  • パスワード再発行しても同じ。
  • ブラウザ変えてみたけど同じ。

ぐぐって調べてみるとセッションのディレクトリが書き込みできませんでした、てへ♪的なスレッドが見つかった。

なるほどな。

phpinfo() 出力させてセッション格納ディレクトリを調べる。

session.save_path = /var/lib/php/session

ディレクトリのパーミッションを確認。

[root@mx1 mediawiki]# ls -l /var/lib/php/
合計 4
drwxrwx--- 2 root apache 4096  5月 12 22:49 session
[root@mx1 mediawiki]# ls -l /var/lib/php/session/
合計 64
-rw------- 1 nginx nginx 3436  3月 13 12:10 sess_29ih6fgffffffffff9ee024fa7
(snip)
-rw------- 1 nginx nginx   53  3月 19 07:57 sess_tpih6fgfffffork4bvffmff625

なんでグループが apache やねん!
そりゃ書き込めないはずだわ。
最近流行りに乗って Nginx 使ってるので Apache は使っていない。
ファイル自身は nginx 所有者で大丈夫っぽいな。
Ansible でメールサーバー構築する Playbook 開発してたからそれが原因かな。
念のため nginx と php-fpm の実行ユーザを確認する。

[root@mx1 mediawiki]# vim /etc/nginx/nginx.conf
[root@mx1 mediawiki]# vim /etc/php-fpm.d/www.conf
[root@mx1 mediawiki]# id nginx
uid=995(nginx) gid=993(nginx) groups=993(nginx)

対策実施

ディレクトリのグループを nginx に変更する。

[root@mx1 mediawiki]# chown root:nginx /var/lib/php/session
[root@mx1 mediawiki]# ls -l /var/lib/php/
合計 4
drwxrwx--- 2 root nginx 4096  5月 12 22:49 session

用が済んだら phpinfo のファイルは削除する。

[root@mx1 mediawiki]# rm -f phpinfo.php

これでちゃんとろぐいんできるようになりましたとさ。
めでたしめでたし。

参考リンク

  1. [RESOLVED] Cannot Login or Register. Enable Cookies on Project:Support desk
  2. Help:ログイン – MediaWiki

Nginx + php-fpm の CentOS 7.2.1511 をリブートしたら 502 Bad Gateway になった

更新が溜まっていたので yum -y update した。
カーネル系の更新があったのでリブートしたら 502 Bad Gateway となった。

2016-04-03_20h32_15

あまりにも初歩的なんだけど、ログを確認したら

2016/04/03 20:31:21 [crit] 1410#0: *1 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 203.0.113.12, server: pg1x.io, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "pg1x.io", referrer: "https://blog.pg1x.com/"

FastCGI 処理系の php-fpm と通信できていないっぽい。
つまり php-fpm のプロセスが立ち上がっていない。
なんつー初歩的。。。
自動起動設定して起動して解決。

systemctl start php-fpm
systemctl enable php-fpm

Nginx 経由で動く WordPress でパーマリンクをデフォルトから変更したら 404 になった

Nginx + php-fpm で構築した新規 WordPress ブログのパーマリンクをもっとわかりやすい URL にしたいなと思って年月日と英語タイトルにしてみたら見事に 404 になった。

Homebrew で GitHub API rate limit exceeded って言われた時


2016-04-03_19h58_29

2016-04-03_19h58_35

検索して出てきたのは以下。

nginxでwordpressのパーマリンクをデフォルト以外に対応する – Qiita

サンプルを元に設定を変えてみる。

server {
    listen       80;
    server_name  yourhost.com;
    root         /usr/share/nginx/wordpress;
    index        index.php

    charset utf-8;

    location / {
        try_files $uri $uri/ @wordpress;
    }

    location ~ \.php$ {
        try_files $uri @wordpress;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME  /usr/share/nginx/wordpress$fastcgi_script_name;
        include       fastcgi_params;
    }

    location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME  /usr/share/nginx/wordpress/index.php;
        include       fastcgi_params;
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

これを参考に設定してみた。

真っ白なんだなー。。
エラーログ確認してみるとなんだか

2016/04/03 19:58:32 [error] 21562#0: *5481 "/var/www/wordpress/2016/03/27/homebrew-says-github-api-rate-limit-exceeded/index.php" is not found (2: No such file or directory), client: 203.0.113.12, server: pg1x.io, request: "GET /2016/03/27/homebrew-says-github-api-rate-limit-exceeded/ HTTP/1.1", host: "pg1x.io", referrer: "https://blog.pg1x.com/"

よくよく見直すと以下が足りていないので付け足した。
私の例はこんな感じ。

        include        fastcgi_params;
server {
    listen 443 default ssl;
    server_name pg1x.io;
    root /var/www/wordpress;
    index  index.php index.html index.htm;

    charset utf-8;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/blog.pg1x.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.pg1x.com/privkey.pem;

    location / {
        try_files $uri $uri/ @wordpress;
    }

    location ~ /wp-login\.php.* {
        include conf.d/access_list.conf;

        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/wordpress$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ \.php$ {
        try_files $uri @wordpress;

        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/wordpress$fastcgi_script_name;
        include        fastcgi_params;
    }

    location @wordpress {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME  /var/www/wordpress/index.php;
        include        fastcgi_params;
    }

}

見れた!

2016-04-03_20h12_50

Amazon Linux(2013.09)にnginxとPHPをインストールする

一昨日あたりからnginxを始めました。

インストール

yum -y install nginx
yum -y install php-fpm
yum -y install php-mysql php-mbstring php-mcrypt

ドキュメントルートディレクトリを用意する

mkdir -p /var/www/html

/etc/nginx/nginx.conf

location / {
root   /var/www/html;
index  index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
include        fastcgi_params;
}

/etc/php-fpm.d/www.conf

listen = 127.0.0.1:9000
↓
listen = /var/run/php-fpm/php-fpm.sock
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666
↓
listen.owner = nginx
listen.group = nginx
listen.mode = 0664
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
↓
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

起動

service php-fpm start
service nginx start
chkconfig php-fpm on
chkconfig nginx on

動作確認

cat <<EOF >/var/www/html/index.php
<?php
phpinfo();
EOF

蛇足

ちなみに、Amazon Linuxのバージョン確認は

[root@ip-xxx-xxx-xxx-xxx html]# cat /etc/system-release
Amazon Linux AMI release 2013.09

参考文献