NEWS ABOUT Solution WORKS TEAM BLOG お問い合わせ JP EN

NginxでPHPを動かす

aaa

はじめに

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

▼設定方法
・ここでは、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
 ・
 ・


tempsnip
・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;
    }

}

おまけの方が長くなりましたが、以上です。

インスタグラムをやっているのでよかったらフォローお願いします!

井戸川 睦
ひとつ前の投稿 ひとつ前の投稿
ひとつ前の投稿 ひとつ前の投稿 早く帰ろうキャンペーン