Nginx-在特定路径中更改项目根目录

时间:2019-02-10 21:42:00

标签: nginx ubuntu-16.04

我在同一域中设置了两个项目,第一个项目是前端的ReactJS项目,第二个是symfony中的API项目。

我需要配置nginx的虚拟主机,以便我的域www.example.com转到我的reactjs项目,而www.example.com/api转到我的symfony项目。

其他路由器示例www.example.com/register或www.example.com/login必须转到reactjs项目,而www.example.com/api/*中的子文件夹转到我的symfonys项目。

我使用Ubuntu 16.04。我已经尝试了下一个配置

server {
        listen 80;
        server_name example.com www.example.com;

        location /api {
                root /var/www/symfony/public;
                try_files $uri /index.php$is_args$args;

       }

       location / {
               root /var/www/reactjs/build;
               index index.html index.htm index.nginx-debian.html;

               try_files $uri /index.html;
        }

        location ~* \.(eot|ttf|woff|woff2)$ {
                add_header Access-Control-Allow-Origin *;
        }


      error_log /var/log/nginx/Inno_FRT__error.log;
      access_log /var/log/nginx/Inno_FRT__access.log;
}

但这不起作用。

我尝试了上述方法的许多不同变体,但没有成功。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您在root /var/www/symfony/public;中有location /api,它将在root /var/www/symfony/public/api中查找。您可能需要alias。试试这个:

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

有关为什么这样做的必要说明,请参见this answer

此外,您可能需要location /api/,而不是location /api。 Nginx会进行前缀匹配,因此location /api将匹配/apifoobar