ホームページ制作
2020年5月8日
nginxのaliasで設定した仮想ディレクトリでphp-fpmを動かす
今年のゴールデンウィークはひそやかにおわりましたが、皆様体調はいかがでございましょうか。どちら様も引き続きご自愛ください。
さて、今回は小ネタです。同じようなテーマのBlog記事やらQiitaの記事はいろいろみかけますが、なんかどれもうまくいかなったので、ワタシがうまくいった設定を自分のメモ的にご紹介。
Webサーバーの実際のディレクトリ「/var/www/foo」にコンテンツがあるとして、それを公開URL「http://www.example/bar」で公開したい、なんてことがよくあると思います。
Apacheでは別にそれほど悩むことなく、
Alias /bar /var/www/foo
なんてやっておけばよくて、そこでPHP (php-fpm) を動かすのも
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
みたいなカンジで書いておけば特に問題ありません。
これをnginxでやろうとすると、なんか実にうまくいかない、というのが悩みでした。ええ、ワタシが悩んでいました。
通常、「http://www.example.com/」直下というか、document root以下にPHPプログラムがいる場合はこんなカンジだと思います。
root /var/www/foo;
location ~ \.php(/|$) {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
Aliasというか仮想ディレクトリを使う場合は、以下のようにすることでうまく動きました。
location /bar/ {
alias /var/www/foo/;
index index.php;
location ~ ^/bar/(?<script_name>.+\.php)(/|$) {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^/bar/(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
nginxのバージョンなどにもよるかもしれません。ワタシが試したのはUbuntu-18.04 LTS (Bionic) に収録のngnx-1.14.0でした。
もしお役にたてば。
Web制作ならアズシエルにご相談ください。
Web制作パートナーとしてサイトの企画からデザイン、運用まで支援します!Webサイト制作についてはこちらからサービスをご確認ください!
この記事をSNSでシェアする!