基于第一个URL段的动态nginx根

问题描述 投票:0回答:1

首先,我已经在 SO 和其他地方进行了搜索,但看起来我就是无法让这个东西发挥作用。我正在“抓取”其他人解决的问题并尝试结合他们的解决方案,但我得到的只是一堆 404 和重定向循环。我不知道是否有任何尝试足够接近,可以作为几乎有效的尝试发布。

如果重要的话,这是一个 Slim 4 应用程序,但实际上它应该为多个“子应用程序”提供服务,基于每个应用程序将包含在各自目录中的特定配置。

项目根类似于

/var/www/project/instances
,在该目录中将有多个(生成的)子目录,每个子目录都有自己的
index.php
(以及一些其他文件)。这些子目录应该充当每个子应用程序的“根”目录:

/var/www/project/instances
|- /1/index.php
|- /2/index.php
|- /...
|- /N/index.php

应用程序将位于

app.project.test/1
app.project.test/2
等位置。如果我只是对
root
进行硬编码,那么运行特定的“应用程序”就没有问题,但这应该是一个动态解决方案。

server
配置的基本布局如下:

server {
    listen 80;
    listen [::]:80;
    
    server_name app.project.test;
    
    root /var/www/project/instances;

    absolute_redirect off;

    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

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

现在,有问题的部分是将 http 请求正确“路由”到这些子目录。是否应该根据 URL 中的第一段动态设置

root
try_files
应该处理这个问题吗? fastcgi 参数也需要调整吗?

nginx slim slim-4
1个回答
0
投票

一路上想通了。

map $request_uri $instance_id {
    ~^/(?<first_uri_segment>[^/?]+) $first_uri_segment;
}

server {
    listen 80;
    listen [::]:80;
    
    server_name app.project.test;

    absolute_redirect off;

    set $root_path /var/www/project/instances/$instance_id;

    if (!-d $root_path) {
        rewrite . http://projects.test redirect;
    }
    
    root $root_path;

    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.