首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx配置SPA

Nginx配置SPA
EN

Stack Overflow用户
提问于 2020-04-09 19:57:12
回答 1查看 254关注 0票数 1

我需要一些关于SPA的nginx配置的帮助。我把我的东西拼凑到谷歌上,但我不明白它是怎么工作的。

我需要的是:

1)服务静态文件

代码语言:javascript
复制
location ~ \.(css|js|svg|woff|woff2|ico|ttf|eot|jpe?g|png|txt)$ {          
  try_files $uri $uri/ =404;
  expires 1y;
  add_header Cache-Control "public"; 
}

如果没有找到文件,我返回404。如果我只是在URL中输入了错误的文件名也没问题,但是如果我在我的index.html中输入了错误的文件名,而不是404page,我会得到一个空白页面。是不是应该这样?

2)对/api的请求需要重定向到Node后台

代码语言:javascript
复制
location /api {
  try_files '' @proxy;
}

location @proxy  {
  proxy_pass http://localhost:3000;
}

我不太确定在这条线上,是不是应该这样

代码语言:javascript
复制
try_files '' @proxy;

3)最大的问题是,不匹配任何内容的请求都需要返回index.html

代码语言:javascript
复制
location / {
  try_files '' /index.html;
  expires -1;
}

location = /index.html {
  expires -1;
}

据我所知,第一个块将所有未知请求重定向到index.html,但我不明白第二个块是如何为这个index.html服务的。我不是为了服务这个文件而写的,没有try_files指令。

EN

回答 1

Stack Overflow用户

发布于 2020-04-09 21:08:48

1)服务静态文件

您的解决方案非常好。只有当您需要为这些URI设置不同的缓存控制和过期标头时,才需要它。try_files语句是不必要的,因为它与默认行为相同。

2)对/api的请求需要重定向到Node后台

您的解决方案可以简化为:

代码语言:javascript
复制
location /api {
    proxy_pass http://localhost:3000;
}

这将处理任何以/api 开头的URI,除非匹配步骤(1)中的正则表达式。您可以通过使用^~操作符来避免这种情况。详情请参见this document

3)最大的问题是,不匹配任何内容的请求都需要返回index.html

这通常实现为:

代码语言:javascript
复制
location / {
    try_files $uri $uri/ /index.html;
    ...
}

除非请求与任何其他location、文件或目录匹配,否则URI将在内部重写为/index.html。详情请参见this document

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61120619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档