PHP + NGINX环境访问php文件报错’File not found’的原因之一及解决方法

PHP + NGINX环境访问静态文件(html、js等)正常,但是访问php文件报错’File not found’原因之一:

多半是nginx服务器根目录不正确,而且问题出在$document_root上。

nginx关联PHP的配置文件(.conf),参考如下;

server {
    listen 80;
    server_name my-test.com;
    root /usr/share/nginx/html;

    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass   php_7_2_24:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

必须要注意$document_root的用法,它是一个变量,代表当前配置文件中的root,如此,root要在$document_root外层定义,通常写在server头部。

最常见的错误示例:root仅仅写在 location /内容块中,PHP-FPM无疑是读不到root路径里面的文件,如下:

server {
    listen 80;
    server_name my-test.com;
   
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm index.php;
        try_files $uri $uri/ =404;
    }

当然,也可以不用变量$document_root,直接写明路径也行。

    location ~ \.php$ {
        fastcgi_pass   php_7_2_24:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }

除了有点重复,并没什么影响,注意后面如果变动根目录时,里面的两个地方都需要更新哦!

(版权归cpury.com所有,转载请注明出处。)