使用 NGINX 配置不同版本的 PHP 以处理子文件夹

使用 NGINX 配置不同版本的 PHP 以处理子文件夹

我有一个如下所示的 NGINX 配置,因此访问 stg.server.org将由 提供服务PHP 5.6 (php56-php-fpm running on port 9000) ,并将 stg.server.org/simon/apps/由 提供服务PHP 7.3 (php-fpm running on port 9001),但没有成功。有人知道如何实现这一点吗?

server {
    listen stg.server.org:80;
    server_name stg.server.org;

    root   /var/www/html/;
    index index.php index.html index.htm;

    #charset koi8-r;
    access_log /var/log/nginx/access_log;
    error_log   /var/log/nginx/error_log   error;

   location / {
          root   /var/www/html/;
          index index.php index.html index.htm;
          try_files $uri $uri/ /index.php?$query_string;
    }

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {

            root    /var/www/html/;
            fastcgi_pass   127.0.0.1:9000;  #php-fpm PHP 5.6
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
            include /etc/nginx/fastcgi_params;

    }

    location /simon/apps/ {

      root /var/www/stg.server.org/simon/apps/;
      index index.php index.html index.htm;
      try_files $uri $uri/ /index.php?$query_string;

      location ~ \.php$ {

            root /var/www/apps-stg.unep.org/simon/pims/;
            try_files $uri =404
            fastcgi_pass   127.0.0.1:9001;  #php-fpm PHP 7.3
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include  fastcgi_params;

      }


  }


}

答案1

您的配置存在多个问题。

正则表达式 location优先于字首 location除非^~使用修饰符。请参阅这个文件了解详情。

文件的路径是通过将的值root与 URI 连接起来而构成的,因此 URI 中出现的路径部分/simon/apps/不应出现在root值中。

try_files块中的语句应该location ^~ /simon/apps/默认为/simon/apps/index.php脚本而不是/index.php

rootindex指令是继承的,并且不需要在值未改变的块内重复。

例如:

root /var/www/html;
index index.php index.html index.htm;

location / { ... }
location ~ \.php$ { ... }

location ^~ /simon/apps/ {
    root /var/www/stg.server.org;
    try_files $uri $uri/ /simon/apps/index.php?$query_string;

    location ~ \.php$ { ... }
}

在您的问题中,PHP 脚本的路径不同。将 PHP 文件保存在同一个文档根目录中更为简单。仅当 URI/simon/apps/index.php位于路径时,上述方法才有效/var/www/stg.server.org/simon/apps/index.php

相关内容