一个域Nginx的多个项目

时间:2019-09-03 15:03:59

标签: symfony nginx nginx-location nginx-config

我需要在一个域(react + symfony)下设置两个项目,这是我的nginx配置:

server {
    listen 80;
    server_name domain.ltd;
    rewrite_log on;
    root /var/www/frontend;

    access_log      /var/log/nginx/project_access.log;
    error_log       /var/log/nginx/project_error.log;

    location / {
        index /index.html;
    }

    location /api/ {
        alias  /var/www/backend;
        try_files $uri /index.php$is_args$args;

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
            internal;
        }
    }
}

root /可以正常工作,因此可以使用static index.html,没有任何问题。但是/ api的symfony应用程序在nginx error.log中抛出错误(禁止使用403):

32349 open() "/var/www/frontend/index.php"

由于某种原因别名被忽略,我在做什么错? 预先感谢

1 个答案:

答案 0 :(得分:1)

locationalias的值都应以/结尾或都不以/结尾。 try_files语句的最后一个参数是URI,因此您需要包含/api/前缀。

例如:

location /api/ {
    alias  /var/www/backend/;
    try_files $uri /api/index.php$is_args$args;

    location ~ \.php$ {
        try_files $uri =404;      
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }
}

另外,将try_files语句添加到avoid passing uncontrolled requests to PHP的嵌套location块中。 SCRIPT_FILENAME的正确值为$request_filename,它可以与rootalias一起使用。