NginxでPHPを仮想ディレクトリ上(alias)で動かすには

 前回の更新から約9か月w年もとっくの昔に越してるのに、これが今年の初投稿という体たらくな るーふぁす ですが今年も宜しくお願いします(;^^)/。

 さて今回は、NginxでPHPを仮想ディレクトリつまりalias指定で動かす方法について書いていきたいと思います。ちなみにコレ、少し前に自宅のサーバ機のハードをアップグレードしたことに伴い、WEBサーバもアップグレードしてみよう的なノリで、ApacheからNginxに変えたのですが、その際に仮想ディレクトリ上のPHPが動かず、半日ほど調べては試行錯誤してたところ、ようやく目当ての情報が見つかったってぐらい情報が無いのですが…一応Debian系と少なくともコチラの環境でもあるCentOS7には関係する話なハズなんですけど―これはNginxがまだそこまで広まってないということなのか、それともaliasを使うのが一般的でないのか…まぁalias使うぐらいならバーチャルホストでって話なんだろうけど…気を取り直して設定について書いていこうと思います(;^^)

■目的

 以下の設定は、nginxを用いて公開ディレクトリ及び仮想ディレクトリ下のphpファイル並びにhtmlファイルにおいてPHPを実行することを目的としています。

 また、公開ディレクトリ(ドキュメントルート)は /www 仮想ディレクトリは /blog/とし/home/Hoge
/Web/に割り当てるものとします

 なお、nginxを用いて通常のhtml及び公開ディレクトリ下のみでのPHPの実行が出来ることを前提にしているので、nginx並びにphp-fpmのインストール及び初期設定(ユーザ,グループの設定など)に関しては触れません。

■公開/仮想ディレクトリの設定

 とりあえず、(nginxの設定上の)PHPのことは一旦置いておいて、まずは公開並びに仮想ディレクトリの設定をしてみることにします。
server {
    listen       80;
    server_name  example.com;

    location / {
        root   /www;
        index  index.html index.php;
        error_log   /var/log/nginx/error.log;
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

   location   /blog {
        alias  /home/Hoge/Web
        index index.html index.php;
   }

   location ~ /\.ht {
        deny  all;
   }
}
 まぁなんのことはなくデフォルトの構成に、物理パス /home/Hoge/Web のエイリアスとしてblogを与えた仮想ディレクトリを追記しているだけです。
 これによって、例えば /home/Hoge/Web/test.html といったファイルがある場合、http://example
.com/blog/test.html でアクセスが可能になります。

■PHPとの連携部の設定

 さて、いよいよ本題のPHPとの連携部の設定です。
server {
    listen       80;
    server_name  example.com;

    location / {
        root   /www;
        index  index.html index.php;
        error_log   /var/log/nginx/error.log;

        location ~ \.(php|html)$ {
                fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
        }
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

   location   /blog {
        alias  /home/Hoge/Web
        index index.html index.php;

        location ~ \.(php|html)$ {
                fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
        }
   }

   

   location ~ /\.ht {
        deny  all;
   }
}
ハイライトの部分以外は前述のdefault.confと同じです。なお、このPHPとの連携部分において一番重要な項目は、
 location ~ \.(php|html)$ {
                fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
        }

fastcgi_param SCRIPT_FILENAME $request_filename;

です!大事なことなので2回言いましたw

 ちなみに、公式のサンプルを含め、良く見かけるものでは、この部分が

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

となっていますが、それだと少なくともCentOS7 の環境では動きませんでした。

 ともかく、CentOS7においては上記のnginxの設定でNginxでPHPを仮想ディレクトリ上(alias)で動かすことが出来ました(勿論、別途 php-fpm等の設定は必要です)

 今回は以上になります。ではでは(;^^)/