在 nginx 中使用基于路径的路由而不是子域

在 nginx 中使用基于路径的路由而不是子域

我正在尝试执行基于路径的路由而不是子域来为 React 应用程序的构建文件夹提供服务。用于为构建文件夹中的静态文件提供服务的 nginx 配置是:

server {
        listen 80;
        listen [::]:80;

        root /var/www/Project/build;
        index index.html index.htm index.nginx-debian.html;

        server_name web.example.com;

        location / {
            try_files $uri $uri /index.html;
        }
}

目前它在web.域名.xyz但我想要类似的东西域名.xyz/web

我参考了本文档并做了类似的事情来提供在 build 文件夹中创建的 index.html 文件

server {
        listen 80;
        listen [::]:80;

        root /var/www/project/build;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com;

        location /web {
                try_files $uri $uri /index.html;
        }
}

答案1

指令的缺陷root在于,在解析请求时,URI 会附加在其后面。

在您的情况下,当向发出请求时http://www.example.com/web/,nginx 会尝试寻找/var/www/project/build/web/index.html以满足该请求。

如果您想将文件存储在build而不是 中build/web,则需要使用alias指令:

location /web {
    alias /var/www/project/build;

    try_files $uri $uri/ /index.html;
}

相关内容