nginx + Fuel PHP でエンドポイントの alias 設定
うまく動かないのはバーチャルホストであることが問題ではなく
エンドポイント alias の問題みたいで
最初の質問からききたいことが変わってきてるので1度整理し直しました
すでにかなり古いバージョンの apache + Fuel で動いてる API サーバーがあって
今回部品を全部新しくした上で nginx 上で動くようにしたいです
fuel が /srv/www/localhost/current/api にインストールされていて
apache では
Alias /api "/srv/www/localhost/current/api/public"
という設定があって最終的に localhost/api/user/ というエンドポイントで
app/classes/controler/user.php コントローラーが呼ばれるようにしたいです
fuel, nginx, php-fpm のインストールや既存ソースのデプロイはおわって
https://fuelphp.com/docs/installation/instructions.html#/nginx
教えていただいた Fuel の nginx の設定をみて
server {
listen 80;
server_name localhost;
root /srv/www/localhost/current/api/public;
index index.php index.html index.htm;
location / {
index index.php;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param FUEL_ENV "<%= @env %>";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
のようにかいたところ curl localhost/user は user コントローラーを見に行ってくれました
ただ nginx で alias で PHP を動かす方法がわからずに困っています
どうすれば /api というプレフィックスのついたエンドポイントでアクセスできるでしょうか
① nginx にも alias というのがあるみたいなので単純に
location /api {
alias /srv/www/localhost/current/api/public;
index index.html index.php;
}
というのを加えて
curl http://localhost/api/user/
を叩いてみたんですがやはり 404 のまま PHP にすら渡ってる様子がないです
curl localhost/user は成功します
②http://rufas.manyoldmoon.com/blog/1601 を参考にして
location /api {
alias /srv/www/localhost/current/api/public;
index index.html index.php;
location ~ \.(php|html)$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
変わらず nginx 404 がでます
③https://qiita.com/mogetarou/items/ceada1b5670ca15f50d9
というのを回答で教えていただいたんですが WP 用でどこをどう参考にしていいかわからず
fastcgi_split_path_info ^(.+\.php)(/.+)$;
というのがあったのでかいてみたんですが変化なし
その下にマルチサイトのサブディレクトリのルールというのがあって rewrite というのがあったので
location /api {
if (!-e $request_filename) {
rewrite ^/api(/.*\.php)$ $1 last;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param FUEL_ENV "<%= @env %>";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
という感じで /api を取り除いたものに rewrite してみたんですがやはり変化なし
④ https://qiita.com/mogetarou/items/ceada1b5670ca15f50d9
こちらは fuel の中に wp を alias でおく設定みたいなんですが alias と rewrite を両方使ってるみたいで
location /api {
alias /srv/www/localhost/current/api/public;
if (!-e $request_filename) {
rewrite ^(.+)$ /api/index.php?q=$1 last;
}
}
location ~ /.+.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param FUEL_ENV "<%= @env %>";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
とかいてみたところ
File not found.
というメッセージだけがかえってきました (nginx の用意した 404 ファイルではない)
いずれにしても PHP は反応せず
⑤ https://uzulla.hateblo.jp/entry/2014/03/28/221041
location ~ ^/api.*/$ {
rewrite ^(.*)$ $1/index.php last;
}
location ~ ^/api/(.*\.php)$ {
alias /srv/www/localhost/current/api/public/$1;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
fastcgi_param FUEL_ENV "<%= @env %>";
}
location ~ /api/(.*)$ {
alias /srv/www/localhost/current/api/public/$1;
}
curl http://localhost/api/user/ は nginx 404 でかわらず
curl http://localhost/user も PHP ソースが表示されるようになってしまいました
人によって方法や書き方がバラバラで
location をネストさせるのか並列で並べるのか
rewrite だったり alias だったり script_name だったり何が正解なのかわかりません
ホスティングサーバーと Fuel のコントローラに渡す場合で違うんでしょうか…
どうも nginx の alias はディレクトリ位置を変更するためのもので
エンドポイント側を変更できるものではないんでしょうか…
エンドポイント側にプレフィックスをつけることは nginx ではできなくて apache を使うしかない感じでしょうか…