yumでインストールしたphpMyAdminをnginxで稼働させる。

    

稼動ドメインの設定

pma.xxxxx.comというドメインで動くように設定します。
pma.xxxxx.comについての名前解決はサブドメインを設定してもよいですが、クライアントPCのhostsファイルを書き換えて解決した方が安全なのではないかと思います。もちろん基本認証やIP認証を設定した方がいいです。

/etc/nginx/conf.d/pma.confを作成

server {

  listen 80;
  client_max_body_size  32M;
  server_name pma.xxxxx.com;

  location / {
    root   /usr/share/phpMyAdmin/;
    index  index.php index.html index.htm;
    if (-f $request_filename) {
      expires 30d;
      break;
    }
  }

  location ~ \.php$ {
     fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  /usr/share/phpMyAdmin/$fastcgi_script_name;
     include        fastcgi_params;
  }

}

変更後nginxをリロードする。

systemctl reload nginx

その後、クライアントのWEBブラウザでpma.xxxxx.comにアクセスし無事に画面が表示されれば作業完了です。ログインにはmysqlのアカウントを利用します。

うまく動作しない場合

nginxでphpを動作させるのに「php-fpm」を使用する為「php-fpm」のログファイルを確認すればよい。
php-fpmのログファイル出力先は、「/etc/php-fpm.conf」に定義されているとのことなので確認してみる。

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Default Value: /var/log/php-fpm.log
error_log = /var/log/php-fpm/error.log

上記によると、「/var/log/php-fpm/error.log」が指定されているが、該当ファイルをみてもサーバ起動時の警告ログがいくつか存在するのみで、phpMyAdmin上で発生したエラー原因を特定できるような内容は記述されていなかった。

これは「/etc/php-fpm.conf」の「catch_workers_output」を確認しコメントとなっている為で、この値をyesに設定すればPHP実行時に吐いたエラーを記録することができる。

/etc/php-fpm.confを編集する。

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
catch_workers_output = yes

編集完了後php-fpmを再起動する

systemctl restart php-fpm

この状態で再度phpMyAdminにアクセスし、真っ白の画面を確認した後ログファイルを確認する。すると、下記のエラーが記録されていた。

PHP Fatal error:  Call to undefined function __() in /usr/share/phpMyAdmin/libraries/core.lib.php on line 229"

結論からいくと、nginxユーザにセッションファイル格納ディレクトリ「/var/lib/php/session」に書き込み権限がない事が原因であった。sessionディレクトリ内のファイルを削除した後、アクセスするとログイン画面が表示された。ところが、ログインボタンを押下してもログインできない。

nginxでphpMyAdminにログインできない場合の対処

session格納ディレクトリ「/var/lib/php/session」の権限を確認した所下記のとおりであった。
4 drwxrwx--- 2 root apache 4096  4月  7 16:19 2016 session

このケースでは元々yumでインストールしたphpMyAdminをapacheで稼働させていた関係でセッションディレクリの権限がapacheグループに設定いる。また、phpの実行権限はnginxユーザに設定されているためセッションファイルが作成できない状態になっていた。

このディレクトリの権限を変更しても良いが、他の箇所も心配なのでnginxユーザをapacheのグループに参加させることにした。

usermod -G apache nginx

だが、この方法ではうまくいかなかった。
ディレクトリの権限を777にするとログインに成功するので権限が問題であることは間違いない。

色々考えたが、これまでyumでインストールしたWebアプリの権限がapcheになっているのであれば、nginx上で動作するPHPの権限をapacheにし稼働させる方が早いのではないかという結論に達した。

実行権限の編集は下記のファイルを編集する。

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

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; 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

user = apache
group = apache

変更後はphp-fpmを再起動する。

systemctl restart php-fpm