NginxでPHPを動かす
はじめに
PHPをうごかすためには、
・cgiをつかう
・phpモジュールをつかう
という方法がありますが、
apacheの場合:apacheのphpのモジュール(mod_php)がphpを実行することが可能
nginxにはPHPのモジュールがないため、cgiがプログラムを動かすように設定する必要があります。
・PHP-FPMというのは、PHP-FastCGI Process Managerの略で、cgiです。
・PHP-FPM(=FastCGIのインターフェース) → このプログラムを使って、PHPを動作をさせます
ここでは、nginxでphpを動かすための設定と、
nginxの設定ファイルについて、かこうとおもいます。
▼ cgi方式
nginxがphp-fpmにphpの処理を依頼し、php-fpmがphpを処理します。
▼設定方法
・ここでは、nginx→php-fpmの通信はUnixドメインソケット通信です
設定ファイル
nginxの設定
/etc/nginx/nginx.conf
・phpファイルをFastCGI(php-fpm)で接続するように設定
server { location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
php-fpmの設定
/etc/php-fpm/www.conf
・nginx→php-fpmの実行ユーザはnginx
・nginxの設定ファイルのfastcgi_passに設定をした/var/run/php-fpm/php-fpm.sock の実行ユーザもnginxにします
・sockファイルがないときは、php-fpmを起動させたときに生成されます。
user = nginx group = nginx listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx ・ ・
・nginxの設定ファイルとfastcgi_passのlistenをそろえるのが肝です
最後にnginxとphp-fpmを再起動
service nginx restart service php-fpm restart
・これでPHPが動くようになります
おまけ
IP制御:.htaccess
・nginxには.htaccessという考え方がありません。
・apacheでは.htaccessにかいてサーバにアップすればよいですが、nginxの場合は設定ファイルに設定をする必要があります
あるIPからアクセスできないようにしたいとき
apache:.htaccess
Order allow,deny Allow from all Deny from アクセス拒否したいIP
nginx:記述の上から評価されます
location / { deny アクセス拒否したいIP; allow all; }
あるIPからのみアクセスできるようにしたいとき
apache:.htaccess
Order deny,allow Deny from all Allow from アクセス許可するIP
nginx:記述の上から評価されます
location / { allow アクセス許可するIP; deny all; }
間違った記法
記述の上から評価されるため、どこからもアクセスできない
location / { deny all; allow アクセス許可するIP; }
・このように、apacheでは.htaccessで対応していたことを設定ファイルに記入する必要があります
おまけ2:locationディレクティブ
・nginxはlocationディレクティブで設定を適用するrootディレクトリを設定できます。
・たとえば、下記のようにserverコンテキストの下に設定をしたrootはサイト共通のrootとして扱われますが、
locationディレクティブ内に個別にrootを設定をすると、そのlocationディレクティブ内では、このrootが適用されます。
・下記の内容でいえば、phpMyAdminに対してのIP制限が適用されるパスは、
/usr/share/nginx/html/moodle/phpMyAdminとなります。
server { #serverコンテキストの下に書くと共通としてのrootになります root /usr/share/nginx/html/hoge; location /phpMyAdmin { root /usr/share/nginx/html/moodle; allow アクセス許可するIP; deny all; } }
おまけの方が長くなりましたが、以上です。
インスタグラムをやっているのでよかったらフォローお願いします!