我有一个如下所示的 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
。
root
和index
指令是继承的,并且不需要在值未改变的块内重复。
例如:
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
。