位置中的 nginx 别名或 root 被忽略

位置中的 nginx 别名或 root 被忽略

我需要从 提供 CodeIgnitor 服务/app/rsvp/dev/admin

所有请求到/admin应附加到 /admin/index.php(静态资产除外)。主站点​​文件位于/app/rsvp/dist(也是 PHP)中。

Alias 似乎最有意义,但 alias/try_files 组合是长期存在的错误。我尝试过建议的解决方案,但目前都没有效果。

正如评论者所建议的,嵌套的根值和第二个 php 位置确实部分起作用。我认为问题现在出在 try_files 值上。

如下所示,对 /admin/screenings/index 的请求在脚本日志中显示以下内容 -

log_format scripts '$request $status > $document_root$fastcgi_script_name ? $query_string';

获取 /admin/screenings/index HTTP/1.1 502 > /apt/rsvp/dev/admin/index.php ? /admin/screenings/index

有趣的是,返回的状态是 502。主站点没有收到此错误。

有没有办法调试位置块(除了脚本日志)?比如哪些位置块受到请求的影响。

server {
  listen  80;
  server_name  _;

  root  /app/rsvp/dist;
  index  index.php;

  location ^~ /admin {
    root  /app/rsvp/dev;
    try_files  $1  /admin/index.php?$request_uri;

    location ~ \.php$ {
      try_files  $uri =404;
      fastcgi_split_path_info  ^(.+\.php)(/.+)$;
      fastcgi_pass  php:9000; # docker
      fastcgi_index  index.php;
      include  fastcgi_params;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_param  PATH_INFO  $fastcgi_path_info;
    }
  }

  location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_split_path_info  ^(.+\.php)(/.+)$;
    fastcgi_pass  php:9000; # docker
    fastcgi_index  index.php;
    include  fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO  $fastcgi_path_info;
  }
}

答案1

我将使用以下内容:

location ~ ^/admin(.*)$ {
    root /app/rsvp/dev;

    try_files $1 /admin/index.php?$request_uri;
}

这里我们捕获 URL 路径的结尾到一个变量,并将其用作try_files文件路径。

相关内容