今まで作ってきたVirtualBoxで作るCentOS+nginxの検証Webサーバーでいろいろとhtmlやらphpやらを動かして遊んでいると、拡張子がphp以外のファイルではphpが動かない事に気が付いた。そういえば、そのあたりの設定は何もしていなかった。Apacheならば、htaccessファイルで”AddType application/x-httpd-php .php .html”とか、”AddHandler application/x-httpd-php .php .html”とかすればOKだが、nginxではどうすればいいのだろうか。nginx設定と、php-fpmの設定をいじくりまわせばよさそうだ。ついでに、fastcgiのソケットをTCPからUNIXソケットに変えてみる。そっちの方が高速な動作が期待できそうだからだ。
1.php-fpmの設定変更
まずはphp-fpmの設定をいじくる。php-fpmの設定ファイルは/etc/php-fpm.confだが、デフォルトの設定では/etc/php-fpm.d/ディレクトリは以下のconfファイルも読み込むようになっている。今回は/etc/php-fpm.d/www.confを編集する。
# vi /etc/php-fpm.d/www.conf
~ 省略 ~
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock
~ 省略 ~
; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
; FPM to .php extensions to prevent malicious users to use other extensions to
; exectute php code.
; Note: set an empty value to allow all extensions.
; Default Value: .php
;security.limit_extensions = .php .php3 .php4 .php5
security.limit_extensions = .php .html
~ 省略 ~
拡張子phpに加えて、htmlも扱う設定と、ソケットをTCPでlocalhostのIPのポート9000番でリッスンする設定から、unixソケットを使うように変更した。
2.nginxの設定変更
次にnginxの設定ファイルをいじくる。/etc/nginx.confに記述してもいいけど、デフォルト設定で/etc/nginx.confから/etc/nginx/conf.dディレクトリのconfファイルもインクルードするように設定されているので、そちらに置いた個々のconfファイルで設定する。今回は例として/etc/nginx/home.confを編集する。
# vi /etc/nginx/conf.d/home.conf
~ 省略 ~
# location ~ \.php$ {
location ~ \.(php|html)$ {
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/download/$fastcgi_script_name;
include fastcgi_params;
}
~ 省略 ~
Serverディレクティブは以下に追加されているfastcgi関連のlcationディレクティブを編集している。 最初の行でphpだけだったところに、htmlの条件も付けくわえた。fastcgi_passも、localhostのIPのポート9000番を使用していたのを、/var/run/php-fpm/php-fpm.sockというソケットを使用するように変えてみた。
3.設定の反映!
設定ファイルを読み込ませるためphp-fpmプロセスは再起動し、nginxには設定ファイルを読み込ませる。
# /etc/init.d/php-fpm restart
php-fpm を停止中: [ OK ]
php-fpm を起動中: [ OK ]
#
#
# nginx -s
nginx: option "-s" requires parameter
# nginx -s reload
#
これで、htmlファイルでも<?php ?>で囲めばphpがfastcgiで動くようになった。こういうこまごましたところで躓きつつ、ちょっとづつ前へ進んでいくのである。
2 件のコメント!
この記事のお陰。感謝感謝。
どういたしまして。お役に立てて何よりです。