首页 > 解决方案 > NGINX 总是强制下载 PHP 页面

问题描述

我正在尝试为 PHP 创建一个 NGINX 配置,它将在 docker 设置上运行。使用在线的一些 NGINX/PHP 指南,我创建了一个 conf 文件,旨在获取对服务器的所有请求,但存在的文件除外,但是当我点击基本 url 时,Chrome 会下载一个包含我的内容的文件index.php,未处理。如果我点击任何其他页面,我会 404。

server {
    index index.php;
    server_name gamersplane.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/api;

    location .* {
        try_files $uri =404;
        rewrite .* index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass api:9000;
        fastcgi_index index.php;
        fastcgi_param HTTP_PROXY '';
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

我觉得我应该在现有的位置块之前为任何不是 .php 的东西创建一个位置块,但我似乎无法弄清楚我哪里出错了。是 conf 错误,还是我的 docker 设置有问题阻止了通信?不知道如何分辨。

标签: phpnginx

解决方案


你可以试试这个配置吗?

server {
    index index.php;
    server_name gamersplane.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/api;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ [^/]\.php(/.*$|$) {
        fastcgi_split_path_info ^(.*[^/]\.php)(/.*$|$);
        fastcgi_pass api:9000;
        fastcgi_index index.php;
        fastcgi_param HTTP_PROXY '';
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

这可能有效,但我不确定api:9000后端。


推荐阅读