centos nginx+php 目录下的项目访问显示404

nginx下的php.conf配置是这样的.

server {
    listen 8000;
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/php;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

/usr/share/php 目录下创建phpinfo.php 是没问题的.正常显示.
但是如果放我的项目进去.访问xxx.xxx.xxx.xxx/project 却显示404 NOT FOUND
求如何解决?????

会不会是我项目用的是CI框架导致的???

阅读 10.9k
4 个回答
fastcgi_param  SCRIPT_FILENAME  /usr/share/php$fastcgi_script_name;

你配置项目的时候,需要在nginx配置这边指定项目的root,就是入口文件所在的位置,并且看项目是否需要隐藏index.php,你要rewrite.

把你location ~ \.php$配置段的第一行去掉即可。
现在每次遇到php文件,就跑到/usr/share/php目录里找去了,你写到其他目录里,当然就找不到404了。

因为你的这个配置 root /usr/share/php,让你的项目目录是 /usr/share/php
那么请求到达时,会到该目录下寻找资源。找不到就会报 404.

推荐将 root 配置在 server 这个级别。不要放在 location 中。示例配置:

server {
    listen       80;
    server_name  local.test.com;

    charset utf-8;
    
    root /data/wwwroot/test; // 你项目的目录 放在 server 这个层次

    location / {
        #root   /usr/share/nginx/html;
        try_files $uri $uri/ /index.php$is_args$args;
        index  index.php index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_index  index.php;
        include        fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
        try_files $uri = 404;
    }
}
推荐问题
宣传栏