問題は次のとおりです: (私は NGinx を初めて使用しており、それについて読みましたが、まだ有効な解決策を見つけていません。)
私はWindowsシステムを使用しています。
私のプロジェクトのファイルシステムは次の場所にあります:
E:/www/
この例では、後ほどアクセスするプロジェクト フォルダーを次に示します。
E:/www/projectTest
Apache サーバーは正常に動作しています。並行して Nginx サーバーをセットアップしたいので、別のポートを使用して nginx を構成しました (以下の構成ファイルを参照)。
Nginx ファイルは次の場所にあります:
E:/nginx/
そこに PHP をコピーしました:
E:/nginx/php/
以下は、php と nginx の設定をテストするために現在のフォルダーに配置したサンプルの「index.php」です。
<?php
echo "THIS IS A TEST";
?>
これが私の nginx.conf ファイルです (コメント行は削除しました) :
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8111;
server_name localhost;
root E:/nginx/;
index index.php index.html index.htm;
charset utf-8;
location / {
alias E:/www/;
}
location /projectTest/ {
alias E:/www/projectTest/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root ../www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/conf/$fastcgi_script_name;
include fastcgi_params;
}
}
}
すべて正常に動作しているようです。つまり、「localhost:8111/index.php」または「localhost:8111/projectTest/index.php」にアクセスすると、そこに配置した「index.php」が取得され、画面に「THIS IS A TEST」というテキストが表示されます。
しかし :
Firebug を開いてページをテストすると、常に次のエラー メッセージが表示されることに気付きました (ページが表示された場合でも)。
NetworkError: 404 Not Found - http://localhost:8111/
//Same error when I call index.php in url :
NetworkError: 404 Not Found - http://localhost:8111/index.php
//Same error when I call my projectTest folder :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/
//Same error when I call my index.php in projectTest url :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/index.php
コマンドラインで Nginx を起動する方法は次のとおりです。
E:\nginx>nginx.exe
E:\nginx\php>php-cgi.exe -b 127.0.0.1:9000 -c e:/nginx/php/php.ini
php.ini 内:
doc_root = "E:/www"
extension_dir = "E:/nginx/php/ext"
error_reporting = E_ALL
私の nginx 設定に何か問題があるに違いありません。私は Apache から来たので、この .conf ファイルで本当に混乱しています。これについていろいろ読みましたが、"root" や "alias" の値、そして fast-cgi php のことについてはまだまったくよくわかりません...
読んでくれてありがとう/助けてありがとう/アドバイス
答え1
設定にいくつかの問題があります:
- サーバーレベルで指定し
root
、次にブロックalias
で指定しますlocation
。これ自体は間違いではありませんが、混乱を招きやすくなります。
すべてのプロジェクト ファイルが の下にある場合はE:/www
、これらを使用してlocation
ブロックとブロックの両方を削除し、 ブロック内alias
のみを設定します。root E:/www
server
root
処理ブロック内でディレクティブを指定します.php
。これは機能しません。
Web サーバーに特別な要件がない場合は、PHP に次の設定を使用します。
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
この設定により、nginx はディレクトリから提供されるファイルを検索しE:/www
、PHP ファイルを PHP-FPM に渡して実行します。