如果URI包含“dashboard”,nginx不会向php fpm发送请求,但它会为所有其他URI发送请求

如果URI包含“dashboard”,nginx不会向php fpm发送请求,但它会为所有其他URI发送请求,nginx,php,Nginx,Php,我正在推出自己的MVC框架,这让我发疯。我有所有不解析为实际文件的URL重定向到/index.php?$args。在该框架内,我询问请求的URI以提取请求的上下文和参数。我从服务器上偷了这个配置片段 示例: example.com/dashboard example.com/user/456 example.com/devices example.com/blog/789 以上所有内容都应该向php fpm发送index.php请求。我的问题是1并没有像预期的那样工作,而2、3和4都没有 在第1

我正在推出自己的MVC框架,这让我发疯。我有所有不解析为实际文件的URL重定向到/index.php?$args。在该框架内,我询问请求的URI以提取请求的上下文和参数。我从服务器上偷了这个配置片段

示例:

example.com/dashboard example.com/user/456 example.com/devices example.com/blog/789 以上所有内容都应该向php fpm发送index.php请求。我的问题是1并没有像预期的那样工作,而2、3和4都没有

在第1种情况下,我认为nginx没有发送到php fpm,而是返回index.php的内容,最后我看到了一个名为dashboard的文件的save file对话框,文件中是我的index.php源代码

以下是我的相关nginx配置:

location ~ \.php$ {
    try_files $uri =404;
    include php_conf;
}


location / {
    try_files $uri /index.php?$args;
}
我的php_配置是标准配置:

# With php5-fpm:
fastcgi_pass    unix:/var/run/php5-fpm.sock;
fastcgi_index   index.php;
fastcgi_intercept_errors        on;
fastcgi_ignore_client_abort     off;

fastcgi_param   DB_HOST        [redacted];
fastcgi_param   DB_USER        [redacted];
fastcgi_param   DB_NAME        [redacted];
fastcgi_param   DB_PASS        [redacted];

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

include         fastcgi_params;
fastcgi_参数是:

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_FILENAME         $request_filename;
fastcgi_param   SCRIPT_NAME             $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/$nginx_version;

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_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;
有人知道为什么/devices URI有效,而/dashboard无效吗

nginx将用户和SEO友好的URL(如上述格式)转换为对index.php的调用的最佳实践是什么

我很确定文件系统中没有名为/dashboard的文件,它肯定不包含index.php文件的内容

还有一个有趣的附加症状:案例2、3、4导致access.log中出现HTTP 200日志条目,但在案例1中,nginx的访问或错误日志中没有任何内容,即使服务器发送index.php的源内容


我很困惑。

我从未找到根本原因,但我开始怀疑《流浪者》上的nginx不是100%可靠的。我重建了vagrant服务器,上面的配置确实有效

所以当有疑问时:流浪者毁灭;流浪汉