nginxでPHPを使えるようにする(CentOS7)
2015/12/14
CentOS7にnginxをインストールを行ったので、PHPを使えるようにします。
ドキュメントルートの作成
CentOS7をミニマムでインストールした状態で、Apacheもインストールしていない為、おなじみの/var/wwwディレクトリがありません。
nginxのデフォルトでは、/usr/share/nginx/htmlになっているのですが、
今回は、/var/www/htmlというディレクトリを作成し、そこをドキュメントルートとします。
[root@test]# mkdir -p /var/www/html←ディレクトリを作成※-pオプションで再帰的にwwwとhtml両方のディレクトリが作成される
php-fpmをインストール
[root@test]# yum list | grep php-fpm←php-fpmがあるか確認 php-fpm.x86_64 5.4.16-36.el7_1 updates←ありました [root@test]# yum -y install php-fpm←yumでインストール
php-fpmの設定ファイル変更
/etc/php-fpm.d/www.confのapacheと記載してある箇所をnginxに変更します。
[root@test]# cd /etc/php-fpm.d/←ディレクトリ移動 [root@test php-fpm.d]# cp www.conf www.conf_default←設定ファイルのバックアップ作成 [root@test php-fpm.d]# vi www.conf←設定ファイル編集 ; RPM: apache Choosed to be able to access some dir as httpd user = nginx←nginxに変更 ; RPM: Keep a group allowed to write in log dir. group = nginx←nginxに変更
また、www.confを見ると、php_value[session.save_path] = /var/lib/php/sessionとセッションの保存先が定義されていますが、
該当のディレクトリがありませんので作成します。
[root@test]# mkdir /var/lib/php/session←sessionディレクトリ作成 [root@test]# chown nginx:nginx /var/lib/php/session←所有者変更
php.iniの編集
[root@test]# cp /etc/php.ini /etc/php.ini_default←設定ファイルのバックアップ作成 [root@test]# vi /etc/php.ini←php.iniの編集 default_charset = "UTF-8"←デフォルトの文字コードの設定※行頭のコメントアウト;を外す date.timezone = "Asia/Tokyo"←タイムゾーンの設定※行頭のコメントアウト;を外して、"Asia/Tokyo"と記述 mbstring.language = Japanese←デフォルト言語の設定※行頭のコメントアウト;を外す
nginxの設定変更
ドキュメントルートの設定と、PHPを実行できるように修正します。
[root@test]# cd /etc/nginx/conf.d/←ディレクトリ移動 [root@test conf.d]# cp default.conf default.conf_default←設定ファイルのバックアップ作成 [root@test conf.d]# vi default.conf←設定ファイル編集 location / { root /var/www/html;←ドキュメントルートに index index.php index.html index.htm;←index.phpを追加 } ~~~~~~~~ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ {←以下コメントアウトを外す root /var/www/html;←ドキュメントルートに変更 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;←$fastcgi~以前をドキュメントルートに変更 include fastcgi_params; }
php-fpmの起動
php-fpmを起動します。今回はCentOS7なので、systemctl を利用します。
[root@test]# systemctl start php-fpm←php-fpmの起動 [root@test]# systemctl enable php-fpm←php-fpmの自動起動設定
nginxの再起動
nginx設定ファイルのdefault.confを変更したので、nginxも再起動します。
[root@test]# systemctl restart nginx←nginxの再起動
テストファイルの作成と確認
設定が完了したので、index.phpファイルを作成します。
[root@test]# echo "" > /var/www/html/index.php←index.phpの作成
ブラウザでアクセスしてみます。
nginxでドキュメントルートを変更したら403 forbiddenが表示される時
SELinuxが無効になっているか確認してみてください。
[root@test]# getenforce←SELinux状況確認 Enforcing←有効になっている [root@test]# setenforce 0←無効にする [root@test]# getenforce←再度状況確認 Permissive←無効になっている
この設定でSELinuxを無効にする事はできましたが、一時的な設定なので再起動すると元の設定に戻ってしまいます。
恒久的に無効にするには設定ファイルを変更する必要があります。
[root@test]# vi /etc/selinux/config←SELinux設定ファイル編集 #SELINUX=enforcing←SELinux有効をコメントアウト SELINUX=disabled←SELinux無効を追記
これで再起動すると設定が適用されます。