当前位置: 首页 > 知识库问答 >
问题:

通过nginx返回404无效路由

岳允晨
2023-03-14

我正在使用nginx和react。我的nginx.conf文件

server {
listen 80;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}

根据此配置,nginx为所有路由服务200。假设我的路线是

  example.com/login
  example.com/landing
  

现在假设有人输入错误的url

 example.com/test

在这种情况下,我想抛出404而不落地到nginx级别本身的应用程序。这是否可能在nginx级别处理路由和发送404尽管200和比在REACTE级别处理。

我发现要在nginx级别限制任何特定的路由,我们可以使用下面的代码来实现

location ^~ /test/ {
    return 404
}

但我想限制所有对我使用的无效的路由

# return 404 for all routes
location / {
    return 404;
}
# define each possible route like this
location /login {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
}

location /landing {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
}

但在此之后,我的应用程序没有加载,获得503服务暂时不可用

第一个问题是,真的有可能在nginx级别实现路由,如果是的话,我需要采取什么方法,任何线索或参考将会有很大的帮助。提前致谢

编辑请查找docker文件

# Base Image
FROM node:10-alpine AS base
MAINTAINER test@test.com
RUN mkdir -p /usr/src/app
COPY . /usr/src/app

# Dependencies
FROM base as build
WORKDIR "/usr/src/app"
RUN npm install
RUN npm run test
RUN npm run build

# Web Server
FROM nginx:alpine
EXPOSE 80
COPY --from=build /usr/src/app/build /usr/share/nginx/html
COPY --from=build /usr/src/app/nginx.conf /etc/nginx/conf.d/default.conf

共有1个答案

呼延智明
2023-03-14

是的,nginx可以用于此。

COPY --from=build /usr/src/app/nginx.conf /etc/nginx/nginx.conf

就用这个吧。

 类似资料:
  • 我试图创建一个入口控制器,它指向我通过Nodeport公开的服务。 以下是入口控制器的yaml文件(摘自https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/):

  • 我创建了一个部署、一个服务和一个入口,以便能够从我的主机访问NGINX web服务器,但我一直没有找到404。经过长时间的故障排除,我已经到了一个非常欢迎帮助的地步。 步骤和相关yaml文件如下所示。 启用Minikube NGINX入口控制器 minikube插件支持入口 创建NGINX web服务器部署 创建ClusterIP服务以管理对POD的访问 创建入口以从集群外部访问服务 测验 连接到

  • 我正在使用SpringMVC开发一个REST服务,在那里我在类和方法级别有@刚需映射。 此应用程序当前配置为返回在web中配置的错误页面jsp。xml。 但是,我希望返回自定义JSON,而不是此错误页面。 通过在controller中编写此代码,我能够处理异常并为其他异常返回json,但不确定在url根本不存在的情况下如何以及在何处编写返回json的逻辑。 我试过@ControllerAdvice

  • 我用FCM发送推送通知,我的代码在Chrome上运行得很好,但在Firefox上却很困难。我得到了这样的回应 我的完整API请求如下所示 https://fcm.googleapis.com/fcm/send 标题 TTL:60 用户代理:Fiddler 主持人:fcm。古格里皮斯。通用域名格式 授权:密钥=aBCABC-aBCABC 内容类型:应用程序/json 内容-长度:250 身体 {“t

  • 我编写了controller,它为每个映射使用了不同的值。现在我将它简化为对所有映射使用相同的值,但是我不知道如何使test工作,因为它在每个映射上都返回404。 这里是我的控制器: 和我的测试: 404及以下所有测试结果: 在org.springframework.test.util.assertionerrors.fail(assertionerrors.java:59)在org.spring

  • 我试图利用Laravel5.7中新的签名中间件,但由于某些原因,生成的签名URL返回403个无效签名。 我使用最新的Laravel版本,PHP 7.2 这是我的web.php路线: 这是在我的控制器: 生成URL并显示如下内容: https://example.com/report/1/1?expires=1545440368 但是,当我点击链接时,结果是403,并显示消息:“无效签名” 有什么想