server {root /srv/www;location / { index index.html index.htm; }location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /src/www$fastcgi_script_name; include fastcgi_params; }}
在目錄/srv/www中有index.html index.php 兩個檔案,訪問localhost/index.html ,localhost 能夠正常顯示/srv/www/index.html頁面的內容,但是訪問index.php檔案卻顯示File Not Found,不知到是怎麼回事?在這種情況下難道nginx不是應該將/srv/www/index.php檔案先傳送給監聽在127.0.0.1:9000的php解析器,然後通過其解析後返回解析器的內容給用戶端嗎?不知到哪裡的問題,希望幫忙解答下
回複內容:
server {root /srv/www;location / { index index.html index.htm; }location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /src/www$fastcgi_script_name; include fastcgi_params; }}
在目錄/srv/www中有index.html index.php 兩個檔案,訪問localhost/index.html ,localhost 能夠正常顯示/srv/www/index.html頁面的內容,但是訪問index.php檔案卻顯示File Not Found,不知到是怎麼回事?在這種情況下難道nginx不是應該將/srv/www/index.php檔案先傳送給監聽在127.0.0.1:9000的php解析器,然後通過其解析後返回解析器的內容給用戶端嗎?不知到哪裡的問題,希望幫忙解答下
估計是你nginx的fpm的配置問題。
我這邊這樣搞的,已經用過好多個網站了:
server { listen 80; ## listen for ipv4; this line is default and implied root /www/web; index index.html index.htm index.php; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }}
看看fpm錯誤記錄檔,分分鐘定位問題啊!
location / { index index.php index.html index.htm;}
index 中需要加上index.php 優先識別最前面的檔案
問題出在這裡:
server {root /srv/www;#srv目錄location / { index index.html index.htm; }location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /src/www$fastcgi_script_name; #src目錄 include fastcgi_params; }}
另外:
下面那部分這樣寫最好:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000;# fastcgi_pass unix:/var/run/php5-fpm.sock;#這行和上面一行二選一。 fastcgi_index index.php; include fastcgi_params;}