我有一个基于 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
你应该使用尾随斜杠,并且它必须同时出现在和location
中alias
。
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