2016年3月16日 Nginx 1.9.12 + PHP7.0.4 (PHP-FPM) (RedHat EL 6)をソースからコンパイルした環境でのお話です。なお、DBとしては MariaDB 10.1.12を yum からインストールしました。
構築しながらのメモのため、もっとうまい方法があるかしれません。
またサーバー管理者向けのメモという感じです。
がphpMyAdminにログインしたときの、サーバー情報です。
データベースのクライアントのバージョン:libmysql - mysqlnd 5.0.12-dev - 20150407 は、 MariaDBのものが誤認識されてるのかなぁと思います。
yum remove mysql* で削除(rpm -qa |grep -i mysql でパッケージないことを確認)したのですけどねぇ
PHPをyumで入れてるなら
素直に、epelリポジトリでも追加して、 yum install phpMyAdmin して入れるほうがらくです。
何故 yumを使わぬ?
php-mysql とか諸々のライブラリやモジュールがいっしょに入る(/etc/php.d/以下に大体インストールされる)のですが、PHPをソースからコンパイルしている場合、それってどの程度まで影響があるかチェックするの面倒!!だからです。
前提条件
ドキュメントルート以外に、設置することを目的とします。
この手のシステム系は、ドキュメントルートに置いてうっかり公開設定になっちゃってたらセキュリティ的に面倒くさ、、、じゃなくて住み分けをしたいためです。
この手のシステム系は、ドキュメントルートに置いてうっかり公開設定になっちゃってたらセキュリティ的に面倒くさ、、、じゃなくて住み分けをしたいためです。
- nginxのドキュメントルート
- /var/www/html
- phpmyadminの置き場所
- /usr/local/phpmyadmin
- phpmyadminのアクセス先
- https://◯◯/phpmyadmin/
- BASIC認証のファイル(nginxには htpasswdないので、 yum install httpd-tools でいれておけばOK)
- /etc/nginx/.htpasswd
と仮定します。
以下ではこの例では、IPアドレス制限+BASIC認証+SSL暗号としています。
nginxにおけるSSL設定については割愛します。
nginxにおけるSSL設定については割愛します。
phpMyAdmin側のダウンロードと設定
https://www.phpmyadmin.net/ より phpMyAdminをダウンロードして解凍(展開)し、サーバーの /usr/local/phpmyadmin に置いたとします。
cd /usr/local/phpmyadmin
cp config.sample.inc.php config.inc.php
と、設定サンプルファイルをコピーして、 config.inc.phpファイルを作成します。
$cfg['blowfish_secret'] = 'ユニーク文字';
$cfg['PmaAbsoluteUri'] = 'https://◯◯/phpmyadmin/';
を編集・追加します。
この$cfg['PmaAbsoluteUri'] は、nginxのaliasで phpmyadminへのアクセスをしたときに必須かなと思います。もしなければ、phpmyadminへログインしたときのログイン先が / 以下になってしまい Not found や /以下のコンテンツが出てしまいます。それでも、再度 /phpmyadmin にアクセスしたらログインしたことになっていてアクセス自体はできるのですが鬱陶しいですよね。
nginx側の設定
関連性のある部分のみ書き出します。
location / {
root html;
index index.html index.htm;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
location /phpmyadmin {
alias /usr/local/phpmyadmin;
index index.php;
allow 127.0.0.1;
allow 接続を許可するIPアドレス;
deny all;
auth_basic "phpmyadmin"
auth_basic_user_file /var/nginx/.htpasswd
location ~ ^/phpmyadmin/.+\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^/phpmyadmin(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /usr/local/phpmyadmin$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
とまぁざっとこんな感じになります。
ポイント1「ドキュメントルートへの php設定は内包せよ!」
よくある説明では、
location / {
root html;
index index.html index.htm;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
となっていることが多いのですが、パターンマッチングの優先順位の問題でうまくいきません。この「location ~ \.php$ { } 」については、 location / の中のみで有効に限定してあげるとよいということです。ポイント2「どうせなら 各設定は分離するとよい」
location ごとの設定は、その中に内容してしまったほうがすっきりするということです。まぁそのほうが問題も少ないだろうと思いますね。
2016年3月16日 @kimipooh
0 件のコメント:
コメントを投稿