nginx 服务器根据 laravel 路径重定向到 2 个不同的容器

nginx 服务器根据 laravel 路径重定向到 2 个不同的容器

我正在尝试执行以下操作:

我有 2 个 docker php-fpm(无 nginx) 容器,目录结构相同,但代码版本不同。现在我有另一个装有 nginx 的容器。

当请求转到 foo.com/ 时,它应该转到第一个容器,而当请求转到 foo.com/v11/ 时,它应该转到第二个容器。

问题是它不适用于第二种情况。即当请求转到 foo.com/v11/ 时,它根本不会转到 php-fpm 服务器。配置文件的相关部分如下:

        location / {
                try_files $uri $uri/ /index.php?$query_string;
                location ~ \.php$ {
                        fastcgi_pass php_wbv1.0:5000;
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
                        fastcgi_param QUERY_STRING $query_string;
                        include fastcgi_params;
                }
        }

        location /v11/ {
                rewrite ^\/v11\/(.*)$ /$1 break;
                try_files $uri $uri/ /v11/index.php?$query_string;
                location ~ \.php$ {
                        fastcgi_pass php_wbv1.1:5001;
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
                        fastcgi_param QUERY_STRING $query_string;
                        include fastcgi_params;
                }
        }

有人能告诉我为什么它不起作用吗?

答案1

你的配置因为这一行代码被破坏了

#       }

因此位置 /v11/ 嵌套在位置 / 内

答案2

我在 nginx 邮件列表的同事的帮助下解决了这个问题。问题出在 try_files 指令和 fastcgi_param SCRIPT_FILENAME 中。以下是更新后的配置:

location / {
            try_files $uri $uri/ /index.php?$query_string;
        location ~ \.php$ {
            fastcgi_index index.php;
            fastcgi_pass php_wbv1.0:5000;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME /home/apps/coreengine/public/index.php;
                    fastcgi_param QUERY_STRING $query_string;
                    include fastcgi_params;
        }
    }

    location /v11/ {
        try_files $uri $uri/ /v11/index.php?$query_string;
        location ~ \.php$ {
            fastcgi_index index.php;
            fastcgi_pass php_wbv1.1:5001;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME /home/apps/coreengine/public/index.php;
            fastcgi_param QUERY_STRING $query_string;
                    include fastcgi_params;
        }
    }

相关内容