Home  >  Article  >  Backend Development  >  nginx和php-fpm之间是怎样通信的?

nginx和php-fpm之间是怎样通信的?

WBOY
WBOYOriginal
2016-06-06 20:36:55893browse

<code>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;
        }

}
</code>

在目录/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解析器,然后通过其解析后返回解析器的内容给客户端吗?不知到哪里的问题,希望帮忙解答下

回复内容:

<code>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;
        }

}
</code>

在目录/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的配置问题。
我这边这样搞的,已经用过好多个网站了:

<code>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;
        }
}
</code>

看看fpm错误日志,分分钟定位问题啊!

<code>location / {
    index  index.php index.html index.htm;
}
</code>

index 中需要加上index.php 优先识别最前面的文件

问题出在这里:

<code>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;
        }

}
</code>

另外:
下面那部分这样写最好:

<code>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;
}
</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn