Nginx 和 PHP-FPM - 未找到 .php 文件 - 不知道原因

Nginx 和 PHP-FPM - 未找到 .php 文件 - 不知道原因

我花了好几天的时间阅读有关这个​​问题的资料,诚然,我是 Nginx 新手。我阅读了官方和非官方文档,但似乎无法解决我的问题。希望这里有人能帮助我。

我可以为我的 html 页面(例如 403、404 和 50x.html)提供服务,所以我知道 nginx 在某种程度上正在工作。我的 https 重定向也有效。

我可以通过 telnet 连接到 9001 上的 PHP FPM。

我的所有权限看起来都是正确的,至少对我来说是这样。

我在下面包含了相关的配置文件和输出:

站点可用/默认:

server
{
        listen                  [::]:80;
        server_name             domain.com;
        return                  301 https://domain.com$request_uri;
        #rewrite                ^ https://domain.com$request_uri? permanent;
}
server
{
        listen 443              default ssl;
        server_name             domain.com;
        ssl                     on;
        ssl_certificate         /etc/ss-certificates/ss-domain.com.crt;
        ssl_certificate_key     /etc/ss-certificates/ss-domain.com.key;

        root                    /var/www/domain.com/wwwroot;
        index                   index.php;
        access_log              /var/www/domain.com/logs/access.log combined;
        error_log               /var/www/domain.com/logs/error.log debug;

        error_page              404 /404.html;
        error_page              403 /403.html;
        error_page              500 502 503 504 /50x.html;

        location /
        {
                try_files       $uri $uri/ /index.php?q=$uri&$args;
        }

        location ~ \.php$
        {
                try_files       $uri =404;
                include         fastcgi_params;
                fastcgi_param   HTTPS                   on;
                fastcgi_param   QUERY_STRING            $query_string;
                fastcgi_param   REQUEST_METHOD          $request_method;
                fastcgi_param   CONTENT_TYPE            $content_type;
                fastcgi_param   CONTENT_LENGTH          $content_length;
                fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
                fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
                fastcgi_param   REQUEST_URI             $request_uri;
                fastcgi_param   DOCUMENT_URI            $document_uri;
                fastcgi_param   DOCUMENT_ROOT           $document_root;
                fastcgi_param   SERVER_PROTOCOL         $server_protocol;
                fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
                fastcgi_param   SERVER_SOFTWARE         nginx;
                fastcgi_param   REMOTE_ADDR             $remote_addr;
                fastcgi_param   REMOTE_PORT             $remote_port;
                fastcgi_param   SERVER_ADDR             $server_addr;
                fastcgi_param   SERVER_PORT             $server_port;
                fastcgi_param   SERVER_NAME             $server_name;
                fastcgi_pass    127.0.0.1:9001;
        }

        location ~ /\.ht
        {
                deny all;
        }

        location = /favicon.ico
        {
                log_not_found off;
                access_log off;
        }

}

pool.d/domain.com.conf:

[domain]
listen  = 127.0.0.1:9001
user    = www-data
group   = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chroot = /var/www/domain.com/wwwroot/
chdir = /

网站目录:

ll -s -R /var/www/domain.com/
/var/www/domain.com/:
total 16
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ./
4 drwxr-xr-x 3 root     root     4096 Jul 22 22:49 ../
4 drwxr-xr-x 2 www-data www-data 4096 Jul 25 22:59 logs/
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 wwwroot/

/var/www/domain.com/logs:
total 516
  4 drwxr-xr-x 2 www-data www-data   4096 Jul 25 22:59 ./
  4 drwxr-xr-x 4 www-data www-data   4096 Jul 23 22:48 ../
 24 -rw-r--r-- 1 www-data www-data  18128 Jul 28 15:19 access.log
484 -rw-r--r-- 1 www-data www-data 490826 Jul 28 15:20 error.log

/var/www/domain.com/wwwroot:
total 28
4 drwxr-xr-x 2 www-data www-data 4096 Jul 28 15:00 ./
4 drwxr-xr-x 4 www-data www-data 4096 Jul 23 22:48 ../
4 -rw-r--r-- 1 www-data www-data   53 Jul 26 22:56 403.html
4 -rw-r--r-- 1 www-data www-data   53 Jul 26 22:55 404.html
4 -rw-r--r-- 1 www-data www-data  383 Jul 23 22:42 50x.html
4 -rw-r--r-- 1 www-data www-data 1406 Jul 25 21:46 favicon.ico
4 -rwxr-xr-x 1 www-data www-data   88 Jul 22 22:58 index.php*

nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##

        #include /etc/nginx/naxsi_core.rules;

        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##

        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

提前感谢大家的帮助。

问候,

杰高

答案1

您的访问/错误日志中有什么内容吗?

另外,为什么要包含 fastcgi_params 然后几乎定义它们全部?

这是我的位置块在带有 php-fpm 的 nginx 中的样子:

    location ~ \.php$ {

            try_files $uri =404;
            fastcgi_intercept_errors on;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /path/to/site.com/public$fastcgi_script_name$
            fastcgi_param  PATH_INFO $fastcgi_script_name;
            include fastcgi_params;
    }

尝试将 fastcgi_pass 移至顶部。

答案2

这里的问题是您将 php-fpm 放在 chroot jail 中,但 nginx 将完整的 SCRIPT_FILENAME 路径传递给 PHP 脚本。

在您的 nginx conf 中您有(除其他外):

root /var/www/domain.com/wwwroot;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

对于/index.php他的请求,将其翻译为/var/www/domain.com/wwwroot/index.php。但是您已将 php-fpm 放入 chroot jail 中:

chroot = /var/www/domain.com/wwwroot/

因此 php-fpm 看到的是文件,/index.php而不是/var/www/domain.com/wwwroot/index.php

因此,您必须调整 的路径,SCRIPT_FILENAME使其与 php-fpm 在 chroot 中看到的路径相匹配。通过删除 来完成此操作$document_root

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

答案3

我猜你无法让 nginx 在你的浏览器中显示 .php 文件。

我发现很多东西你根本就不需要,只要让 php 工作就行。据我所知,你只能传递一个“fastcgi_param”参数。据我所知,这就是 FastCGI 的工作方式。如果你有多个 fastcgi_param”参数,nginx 会选择第一个。尝试只列出“fastcgi_pass 127.0.0.1:9001;”作为 fastcgi 参数,看看会发生什么。

您可以在此页面上阅读有关 fastcgi 的更多信息 http://michaelshadle.com/2011/02/11/setting-php-ini-parameters-from-nginx

相关内容