Symfony 需求检查器 returns 404 未找到

Symfony Requirements Checker returns 404 Not found

我将像本教程一样使用 docker 和 php-fpm 创建一个 Symfony 项目:Jobeet

我的 Symfony 是 运行ning,当我访问 http://127.0.0.1 时我可以看到变化 一切看起来都很好。

但是当我想要 运行 Symfony 需求检查器时,我在浏览器中收到来自 Nginx 的 404 Not Found 异常。

我很确定这是我的 nginx.conf 文件的问题。所以我 post 在这里:

server {
    listen 80 default;

    client_max_body_size 520M;

    access_log /var/log/nginx/application.access.log;

    root /application/public;

    # Deny all . files
    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_index app.php;
        send_timeout 1800;
        fastcgi_read_timeout 1800;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

    location ~ \.php$ {
        return 404;
    }

    # Statics
    location /(bundles|media) {
        access_log off;
        expires 30d;
        try_files $uri @rewriteapp;
    }
}

我猜是这部分:

location ~ \.php$ {
    return 404;
}

但是当我注释掉它时,Symfony 开始下载 PHP 文件。

这个 nginx.conf 可能有什么问题?

我认为问题与包含调用 php-fpm:

的其他配置块有关
location ~ ^/index\.php(/|$) {

您可以将其更改为:

location ~ ^/.+\.php(/|$) {

这将告诉 nginx 通过 php-fpm 传递对 php 文件的所有访问。然后,您可以删除每当调用 php 脚本而不是 index.php

时抛出 404 的块
location ~ \.php$ {
    return 404;
}

您的版本是 Symfony 推荐的版本,将确保只有您的前端控制器 (index.php) 可以从外部访问,这对于新的 Symfony 项目来说是合理的。由于您无论如何都不应该在生产环境中公开 check.php,因此我建议您保留生产环境的设置。

总而言之,这可能是您的开发配置:

server {
    listen 80;

    root /var/www/html/public;

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

    location ~ ^/.+\.php(/|$) {
        include fastcgi_params;
        fastcgi_param APP_ENV dev;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_pass php-fpm:9000;
    }
}