nginx(VirtualDocumentRootもどき)でfastcgi(php-fpm)が動かない

Filed under Cent, fastcgi, Linux, nginx, php, WebServer

現在以下のような方法で、VirtualDocumentRootもどきを実装していますが、
PHPのSCRIPT_FILENAMEが正常に取得できないようなので、調査しました。

【変更前】

server {
listen 80;
server_name ~^(.*)\.hoge.com$;
if (!-d /home/hoge.com/$1/web) {
rewrite . http://hoge.com/ redirect;
}

location / {
index index.php;
root /home/hoge.com/$1/web;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/hoge.com/$1/web/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

上記だと、正常に動きませんでした。
原因としては、以下の部分の「$1」の部分に正しい値が入らないためのようでした。

fastcgi_param SCRIPT_FILENAME /home/hoge.com/$1/web/$fastcgi_script_name;

色々試した結果、$1を別の変数として定義してあげれば動くことを確認しました。
結果、以下のような内容になりました。

【変更後】

server {
listen 80;
server_name ~^(.*)\.hoge.com$;
set $subdomain $1;

if (!-d /home/hoge.com/$subdomain/web) {
rewrite . http://hoge.com/ redirect;
}

location / {
index index.php;
root /home/hoge.com/$subdomain/web;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/hoge.com/$subdomain/web/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

とりあえず上記の記述方法で正常動作しました。よかったよかった。

Nginx Http Server

新品価格
¥3,964から
(2010/12/20 19:36時点)

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*