首页 > 解决方案 > Nginx - 在特定路径中更改项目根目录

问题描述

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

我需要配置 nginx 的虚拟主机,以便我的域 www.example.com 转到我的 reactjs roject 和 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;
}

但这不起作用。

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

任何帮助将不胜感激。

标签: nginxubuntu-16.04

解决方案


如果你有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;
}

有关为什么这是必要的解释,请参阅此答案

另外,您可能想要location /api/,而不是location /api. Nginx 会进行前缀匹配,所以location /api会匹配/apifoobar.


推荐阅读