Symfony需求检查器返回404找不到

时间:2019-02-03 15:09:19

标签: symfony docker nginx nginx-config

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

我的Symfony正在运行,访问http://127.0.0.1时可以看到更改 一切看起来都很好。

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

我很确定我的nginx.conf文件有问题。所以我在这里发布:

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文件:D

有人可以阅读此nginx.conf并告诉我该怎么做吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为问题与您的其他配置块有关,其中包含对php-fpm的调用:

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

您可以将其更改为:

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

这将告诉nginx通过php-fpm传递对php文件的所有访问权限。然后,您可以删除每次调用不是index.php的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;
    }
}