NGINX-怎么在文件不存在时才进行代理并且代理到指定的后端url上

文章讲述了如何在前端单页应用(SPA)与后端服务分离的情况下,利用Nginx配置实现对不存在页面的代理,确保用户访问时能正确获取后端服务器内容。通过重写URL和proxy_pass指令,使SPA无需处理复杂逻辑,专注于用户体验。
摘要由CSDN通过智能技术生成

        前端单页应用(SPA)与后端服务分离:当你的前端应用(如使用 React、Angular 等构建的单页应用)和后端服务(如 API 服务器)是分离的,并且前端应用需要访问后端服务的 API 时,你可以使用这种配置。前端应用请求 /(或者其他某个特定的 URL),如果这个 URL 对应的内容不存在,那么 Nginx 会将请求代理到后端服务器上,并返回后端服务器的响应。

        假设你有一个前端单页应用(SPA),当用户访问应用的根 URL(例如 /)时,你希望展示一个欢迎页面。但是,如果用户直接访问了某个具体的页面(例如 /about),而这个页面在 SPA 中不存在,那么你应该将请求代理到后端服务器,让后端服务器根据请求的 URL 返回相应的内容。

        在这种情况下,你可以使用上述的 Nginx 配置。当用户访问 /about 时,因为该页面在 SPA 中不存在,Nginx 会检查 $request_filename 变量,发现该文件不存在,然后执行 if 块中的 rewrite 和 proxy_pass 指令。

        具体来说,Nginx 会将请求重写为 /api/web/about,并将请求代理到 http://127.0.0.1:8080。后端服务器会根据请求的 URL(在这个例子中是 /about)返回相应的内容。

        这样,即使某个具体的页面在 SPA 中不存在,用户仍然能够通过访问相应的 URL 看到相应的内容。同时,由于使用了代理,后端服务器可以处理复杂的逻辑和与数据库的交互,而前端应用只需要关注展示和与用户的交互。

下面是一段在文件不存在时才进行代理的配置

  location / {
        root   /usr/share/nginx/html/;
        index  index.html index.htm;
        if (!-e $request_filename) {
           rewrite ^(.*)$ /api/web$1 break;
      	   proxy_pass http://127.0.0.1:8080;
           break;
        } 

    }

这个 Nginx 配置中的 location / 块定义了对根 URL (即 /)的请求处理方式。以下是详细的解释:

  • root /usr/share/nginx/html;:这行定义了根目录,即当请求的 URL 路径没有指定具体的文件时,Nginx 会在这个目录下寻找默认的文件(如 index.html 或 index.htm)。
  • index index.html index.htm;:这行定义了默认的索引文件。当请求的 URL 路径没有指定具体的文件时,Nginx 会按照这个列表中的顺序尝试查找文件。
  • if (!-e $request_filename) { ... }:这是一个 if 块,用于判断请求的文件是否真实存在。$request_filename 是 Nginx 内置的变量,表示请求的文件路径。!-e 是 Nginx 的测试指令,用于检查文件是否存在。如果文件不存在(!-e 返回 true),则执行 rewrite ^(.*)$ /api/web$1 break; proxy_pass http://127.0.0.1:8080; break; 这段代码。
  • rewrite ^(.*)$ /api/web$1 break;:这行代码使用正则表达式 ^(.*)$ 来匹配任何 URL,并将匹配到的部分(用 $1 表示)附加到 /api/web 后面,生成新的 URL。例如,如果请求的 URL 是 /foo/bar,那么新的 URL 就是 /api/web/foo/bar
  • proxy_pass http://127.0.0.1:8080;:这行代码将请求代理到指定的后端服务器上。这里使用的是本机的 IP 地址 127.0.0.1 和端口号 8080
  • break;:这是 rewrite 指令的参数,用于终止 rewrite 指令的处理,防止 Nginx 继续处理其他的 rewrite 指令或循环。

总的来说,这个配置的主要作用是:当请求的 URL 对应的不存在时,将其重定向到 /api/web 开头的 URL,并代理到后端服务器上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值