我正在尝试执行以下操作:
我有 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;
}
}