在Ubuntu上配置Symfony的Nginx配置

时间:2018-10-24 23:49:35

标签: php symfony nginx ubuntu-16.04 fpm

我想用nginx设置symfony,并且此配置工作正常

server {
    listen 80;
    root /src/web;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /app.php$is_args$args;
    }

    location ~ ^/app\.php(/|$) {
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/app.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }

    error_log /var/log/nginx/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;
}

但是我也希望在服务器上也可以通过app_dev.php和app_test.php访问文件

到目前为止,使用上述配置。 http://127.0.0.1/api/check运行正常

但我也想要

http://127.0.0.1/app_dev.php/api/checkhttp://127.0.0.1/app_test.php/api/check也可以正常工作。

当前它给我404错误

2 个答案:

答案 0 :(得分:1)

假设您将其用于开发,则可以在capturing group ()中列出每个文件(环境),并用{{1}分隔},其基本含义是“或”。

|

重要的是不要在生产服务器上使用此示例,因为它完全不安全

在生产服务器上,您当前的location ~ ^/(app|app_dev|app_test)\.php(/|$) { .... } 仅允许conf是正确的。

答案 1 :(得分:0)

有关更多信息,您可以使用symfonynginx官方文档中的描述。

如您所见,您应该在nginx conf文件中添加一些行:

location ~ ^/(app_dev|config)\.php(/|$) {
    ...
}

如果您还需要app_test.php,则应对其进行一些更改。只需添加文件名即可:

location ~ ^/(app_dev|app_test)\.php(/|$) {
    ...
}

但是请注意:

  

在生产中,请勿包括此内容,也不要部署app_dev.php或app_test.php

另外,最好在error_log ...之前进行以下配置:

location ~ \.php$ {
    return 404;
}