Nginx 配置从不同位置提供 JavaScript 应用程序

Nginx 配置从不同位置提供 JavaScript 应用程序

我有一个基于 JavaScript 的 Web 应用程序需要部署。它以 JavaScript 包(由 webpack 生成)、加载此包的 index.html 文件以及一些其他静态资源文件(如图像)的形式提供。我将所有这些文件放在 中/usr/src/app/dist

目的是,对于给定的请求 URL,nginx 会查找并提供静态资源(如果可用),否则它将返回 index.html 文件,以便 JavaScript 应用程序可以处理该 URL。

例如,如果应用程序的基本 URL 是/my-app/,则应该是:

  • /my_app/logo.png供应/usr/src/app/dist/logo.png
  • /my_app/thing/1(没有此文件)服务/usr/src/app/dist/index.html

或者如果基本 URL 只是/,那么:

  • /logo.png供应/usr/src/app/dist/logo.png
  • /thing/1(没有此文件)服务/usr/src/app/dist/index.html

到目前为止,这似乎很简单。我有一个如下所示的 nginx 配置模板。在启动时,%ROOT_PATH%用基本 URL 替换。

    location %ROOT_PATH% {
        alias /usr/src/app/dist;
        try_files $uri $uri/ %ROOT_PATH%/index.html;
    }

然而,我正在努力寻找一种简单的方法来实现这种替代,两个都给出了基本路径示例,/my_app/以及/

例如,在location指令中,似乎路径一定不/以,结尾除非它就是字符串/。所以我不能直接去掉最后/一个%ROOT_PATH%

如果我不剥离单独的/,那么%ROOT_PATH%/index.html就会变成//index.html并且 nginx 似乎也不喜欢这样。

使其工作的最佳方法是什么?(我也很乐意使用其他类型的内置变量替换,但似乎在允许使用 nginx 配置变量的地方存在缺点。)

答案1

应该使用尾随斜杠,并且它必须同时出现在和locationalias

location /my_app/ {
    alias /usr/src/app/dist/;
    try_files $uri $uri/ /my_app/index.html

在最终 URL 中,在文件系统中查找文件时,location将直接用 替换。这将导致从存储中加载。alias/usr/src/app/dist/index.html

相关内容