NginXがfcgiを使用してdrupalサイトを提供しています。存在しないphpファイル(例:www.example.com/this-file-doesn't-exist.php)の結果を参照しようとしています)このエラーのある白い画面で:
'入力ファイルが指定されていません'
この投稿を使用して、NginXのセットアップを支援しました: http://drupal.org/node/110224
これは私のNginX設定ファイルです:
server {
listen 1.2.3.4:80 default;
server_name www.example.com;
client_max_body_size 6M;
root /var/www/example.com/;
index index.php;
error_page 404 /index.php;
error_page 403 /403.html;
# set up a location to serve static images for static error pages
location ^~ /error_images/ {
root /var/www/static_pages/error_pages;
access_log off;
expires 30d;
}
# use our own custom 403 page
location = /403.html {
root /var/www/static_pages/error_pages;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/static_pages/error_pages;
}
location / {
error_page 404 index.php;
error_page 403 /403.html;
# the main drupal app
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
}
# hide protected files
location ~* \.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$ {
deny all;
}
# serve static files directly
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ {
rewrite ^/favicon.ico$ /sites/example.com/themes/exampletheme/favicon.ico break;
access_log off;
expires 30d;
}
# imagecache needs to have php read any files that it's planning to manipulate
location ^~ /sites/example.com/files/imagecache/ {
index index.php index.html;
# assume a clean URL is requested, and rewrite to index.php
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
break;
}
}
# serve the app via fastcgi
location ~ \.php$ {
# ensure that a 404 is returned if a non existant php file is requested
# doesn't seem to work properly, so commenting out
# fastcgi_intercept_errors on;
fastcgi_pass unix:/tmp/php-fastcgi.sock;
fastcgi_index index.php;
fastcgi_read_timeout 240;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
この投稿 http://forum.slicehost.com/comments.php?DiscussionID=1259 は、権限エラーの可能性があることを示唆しています。ただし、fcgiはuser:group nginx:nginxとして起動します。これは、NginXが実行するのと同じユーザーです。
一般に、構成は問題なく機能し、サイトは100%正常に機能します。問題が発生するのは、存在しない.phpファイルを要求した場合のみです。たとえば、存在しない.htmlファイルをリクエストすると、Drupal 404エラーページが表示されます。これは、存在しない.phpファイルでも発生したいことです。
ps。そのURLを表示したい場合は、http://の後に余分な空白を削除してください-複数のハイパーリンクを投稿するのに十分な担当者がいません!
代わりにtry_fileを使用してみてください。
NGinxのベストプラクティス を参照してください
ワードプレスなど。それに応じて適応します。
location /wordpress {
try_files $uri $uri/ @wordpress;
}
location @wordpress {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(/wordpress)(/.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/wordpress/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
エラーは実際にはPHP overfastcgi。Apacheでも同じ応答が得られます。phpに送信する前にWebサーバーにファイルが存在することを確認させることができます。Apacheを使用すると、次のことができます。これはmod_rewriteを使用していますが、nginxについて十分に理解していないため、実装に役立ちません。代わりに、PHPに、動作を変更できる構成オプションがあるかどうかを確認することもできます。リクエストのphpファイルが見つかりません。
Fastcgi_paramsに次の行を含めてください
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
私も同じ問題を抱えていました。 Webルートディレクトリを行に追加しました
SCRIPT_FILENAME /web/root/$fastcgi-script_name;
そして今、それは魅力のように機能しています。
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/domain.com/public/$fastcgi_script_name;
include fastcgi_params;
}
この構成は私にとっては問題なく機能します。