nginxの「仮想ディレクトリ」がPHPに対応していない問題の解決策
最近 Nginx を設定しており、PHP に FastCGI を使用しています。phpMyAdmin 管理データベースを Web サイトのルート ディレクトリにインストールしたくないので、混在しにくいです。このように、Web サイトのアプリケーションでは、phpMyAdmin のディレクトリを別の場所に置く必要がありますが、Apache ではエイリアスがあり、Nginx では仮想ディレクトリの概念がないため、最初はエイリアスで場所を使用してみました。簡単な設定方法
location /web/ {
alias /data/ web/;
indexindex.htmlindex.htmindex.php;
}
location ~ .*.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
include fcgi.conf;
}
できますhttp://localhost/web/ を使用して /data/web ディレクトリ内の静的ファイルにアクセスしますが、php ファイルにアクセスすると、「入力ファイルが指定されていません」というエラーが報告され、Nginx エラー ログに情報がありませんでした。インターネットで検索したところ、php ファイルはバックエンド FastCGI によって実行されていないという結論に達したため、いくつかの記事を検索し、
location /web/ {エイリアス /data/web/;
indexindex.htmlindex.htmindex.php;
}
location ~ ^/web/.+.php$ {
root /data /;
rewrite /web/(.*.php?) /$1 Break;
include fcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME /data/web$fastcgi_script_name;
}
location ~ .*.(php|php5)?$ {fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
include fcgi.conf;
}
これは、/web/ での rewrite メソッドを使用することを原則とします。処理のためにバックエンド FastCGI に送信され、phpMyAdmin を構成できるように PHP スクリプトの場所が指定されます。構成は次のようになります。
location /phpmyadmin/ {
alias /data/ phpmyadmin/;
indexindex.htmlindex.htmindex.php;
}
location ~ ^/phpmyadmin /.+.php$ {
root /data/;
rewrite /phpmyadmin/(.*.php?) /$1 Break;
include fcgi.conf;
fastcgi_pass 127.0.0.1:9000 ;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME /data/phpmyadmin $fastcgi_script_name;
}
location ~ .*.(php|php5)?$ {
fastcgi_pass 127.0. 0.1:9000;
fastcgi_indexindex.php;
fcgi を含みます。 conf;
}
location ~ .*.(php|php5) ?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index に注意してください。 Index.php;
include fcgi.conf;
}
この段落は phpmyadmin の後に配置する必要があります。これは Nginx の位置ルールに関連しています。詳しくは、Nginx のドキュメントを参照してください。さらに、phpMyAdmin で URI の絶対パスを設定する必要があります。これで完了です。
?