NGINX-将所有内容转发到php脚本

NGINX-将所有内容转发到php脚本

我正在尝试将每个请求转发到同一个 php 脚本。

我想出了这个配置:

server {
    listen 80;
    server_name example.com;

    root /var/www/html;

    index api.php;

    location / {
        try_files $uri /api.php$is_args$args;
    }

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index api.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}

尽管它可以工作,但只要提供了正确的 $uri,它仍然允许直接访问资源。

如果我尝试将第一个位置块更改为如下内容:

location / {
    try_files /api.php$is_args$args =404;
}

它不起作用,总是返回 404。

答案1

server {
    server_name example.com;

    root "/var/www/html";

    location / {
        include "fastcgi_params";
        fastcgi_param SCRIPT_FILENAME $document_root/api.php;
        fastcgi_param SCRIPT_NAME api.php;
        fastcgi_index api.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}

如果目标是将所有请求转发到单个 PHP 脚本,并且如果该单个 PHP 脚本的名称是已知的,那么我们就不需要单独的位置块。只需一个将所有请求发送到该已知 PHP 脚本的位置块就足够了。

fastcgi_split_path_info当需要执行的 PHP 脚本无法提前知晓并且仅作为 URI 的一部分可用时,则不需要。

而且,try_files $uri =404由于已知的 PHP 脚本已经在固定/已知位置可用,因此不需要。

相关内容