gpt4 book ai didi

php - 如何配置 Nginx 以将特定请求模式路由到托管 Symfony 应用程序的特定 php-fpm 上游?

转载 作者:搜寻专家 更新时间:2023-10-31 20:56:56 25 4
gpt4 key购买 nike

我正在开发一个由 3 个微服务组成的应用程序。每个微服务都是一个 Symfony 4 应用程序

为了将我发出的所有请求路由到此应用程序,我正在使用 Nginx

目前有三种 url 模式,每个微服务一个。其中之一是 ^/auth 模式,它允许通过 php-fpm 上游访问身份验证 API。

我已经尝试了很多东西,但目前这是我的目标中最接近的 Nginx 配置。

server {

listen 80;
server_name app.local;
root /app;

# location directive for the authentication API
location ~ ^/auth/ {

root /app/public;

fastcgi_pass auth_api_upstream;
fastcgi_split_path_info ^(/auth)(/.*)$;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root/index.php$fastcgi_path_info;

include fastcgi_params;
}

# ....

# return 404 if other location do not match
location / {
return 404;
}
}

有了这个配置,这就是追加:

  • 我提出请求:GET/auth/publicKey
  • Nginx 处理请求:GET/auth/publicKey 并通过上游将其转发到我的应用程序
  • Symfony 应用程序处理请求:GET/auth 而不是 GET/publicKey(我的目标)

当 Nginx 正在处理请求时:

  • $realpath_root = '/app/public' : Symfony 入口点在 php-fpm 主机上的位置
  • $fastcgi_path_info = '/publicKey' : Symfony 应用程序中的有效路由 url

所以我的问题是:

  • 为什么我的应用程序处理 GET/auth 请求,而 Nginx 之前处理的请求是 GET/auth/publicKey ?
  • 因此,如何解决?

感谢您的回答:)

最佳答案

尝试将 include fastcgi_params; 行向上移动

像这样:

server {

listen 80;
server_name app.local;
root /app;

location ~ ^/auth/ {

root /app/public;

set $app_entrypoint /index.php;

fastcgi_pass auth_api_upstream;
fastcgi_split_path_info ^(/auth)(/.*)$;
include fastcgi_params;

fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param DOCUMENT_URI $app_entrypoint;

fastcgi_param REQUEST_URI $fastcgi_path_info;

fastcgi_param SCRIPT_NAME $app_entrypoint;
fastcgi_param SCRIPT_FILENAME $document_root$app_entrypoint;

}

# return 404 if other location do not match
location / {
return 404;
}
}

关于php - 如何配置 Nginx 以将特定请求模式路由到托管 Symfony 应用程序的特定 php-fpm 上游?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57329591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com