Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有php fpm配置的nginx子位置失败_Php_Nginx - Fatal编程技术网

带有php fpm配置的nginx子位置失败

带有php fpm配置的nginx子位置失败,php,nginx,Php,Nginx,我的服务器有一个nginx配置,如下所示 当我请求服务/dev/sync/sync 它将路由到/home/work/app-web/src/api/dev/sync.php/sync 将php规则与$fastcgi\u script\u nameis/dev/sync.php和$fastcgi\u path\u infoissync 此规则只需要~/service/([a-zA-Z]*/[a-zA-Z]*)(/[a-zA-Z]*)$ 但是当我请求/service/dev/sync/sync时,它

我的服务器有一个nginx配置,如下所示

  • 当我请求
    服务/dev/sync/sync
  • 它将路由到
    /home/work/app-web/src/api/dev/sync.php/sync
  • 将php规则与
    $fastcgi\u script\u name
    is
    /dev/sync.php
    $fastcgi\u path\u info
    is
    sync
  • 此规则只需要
    ~/service/([a-zA-Z]*/[a-zA-Z]*)(/[a-zA-Z]*)$
    但是当我请求
    /service/dev/sync/sync
    时,它将返回404,并返回错误

    *173 open()“/home/work/nginx/html/dev/sync.php/sync”失败(2:没有这样的文件或目录),客户端:172.18.17.90,服务器:localhost,请求:“POST/service/dev/sync/sync HTTP/1.1”

    /home/work/nginx/html
    是我的nginx服务器的默认根目录根目录下的
    配置不可用
    完全可以工作。

    这个配置有什么问题

    server {
    set $work_dir /home/work/app-web;
    listen       80;
    server_name  localhost;
    
    location ~ /service/([a-zA-Z]*/[a-zA-Z]*)(/[a-zA-Z]*)$ {
        root $work_dir/src/api;
        set $file $1;
        set $action $2;
        try_files $uri $uri/ /$file.php$action$is_args$query_string;
    
        location ~ \.php {
            fastcgi_split_path_info  ^(.+\.php)/(.*)$;
            fastcgi_pass unix:/home/work/app-web/php/var/run/app-web.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $work_dir/src/api$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param UNIQUE_ID $request_id;
            include fastcgi_params;
        }
    }
    }
    
    根配置工作正常。 您的问题是存在到/dev/sync.php/sync?的内部重定向,并且新的内部url与regexp位置不匹配 您可以使用激活调试

    error_log /var/log/nginx/debug.log debug;
    
    日志如下所示:

    *1 trying to use file: "/dev/sync.php/sync" "/home/work/app-web/src/api/dev/sync.php/sync"
    *1 internal redirect: "/dev/sync.php/sync?"
    *1 rewrite phase: 1
    *1 http script value: "/home/work/app-web"
    *1 http script set $work_dir
    *1 test location: ~ "/service/([a-zA-Z]*/[a-zA-Z]*)(/[a-zA-Z]*)$"
    *1 using configuration ""
    
    新URL是/dev/sync.php/sync?,此URL不匹配任何位置,因为regexp/service/([a-zA-Z]/[a-zA-Z])(/[a-zA-Z]*)$不用于内部URL

    我建议您使用另一种配置:

    server {
    set $work_dir /home/work/app-web;
    listen       80;
    server_name  localhost;
    
      location ~ /service/([a-zA-Z]*/[a-zA-Z]*)(/[a-zA-Z]*)$ {
        root $work_dir/src/api/;
        set $file $1;
        set $action $2;
        rewrite .* /src/api/$file.php$action last;
      }
    
    
        location ~ \.php {
            internal;
            root $work_dir;
            fastcgi_split_path_info  ^(.+\.php)/(.*)$;
            fastcgi_pass unix:/home/work/app-web/php/var/run/app-web.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param UNIQUE_ID $request_id;
            include fastcgi_params;
        }
    
        error_log /var/log/nginx/test-error.log debug;
    }
    

    注意
    内部
    directive

    您可以使用directive
    error\u log/var/log/nginx/error.log debug激活日志实际上,我已经用与提供者相同的方法修复了这个问题,但我不知道为什么子位置不匹配。当
    try\u files
    时,匹配规则再次开始处理。是,当try\u files执行时,匹配规则再次开始处理