nginx反向代理location和proxy_pass斜杠踩坑

简介: 当下前后端项目分离是一种大的趋势,那么前后端分离之后用什么来做它们之前的信息传递桥梁呢,使用最多的就是nginx的反向代理了。在进行nginx反向代理配置的时候,location和proxy_pass中的斜线会造成各种困扰,有时候多一个或少一个斜线,就会造成完全不同的结果。

背景

     当下前后端项目分离是一种大的趋势,那么前后端分离之后用什么来做它们之前的信息传递桥梁呢,使用最多的就是nginx的反向代理了。

问题描述

在进行nginx反向代理配置的时候,location和proxy_pass中的斜线会造成各种困扰,有时候多一个或少一个斜线,就会造成完全不同的结果。


环境准备

  • 下载nginx安装包并安装
  • 前端环境可以使用相关命令打一个静态包放到nginx安装之后的html文件夹下面
  • 配置nginx的conf的配置
  • 启动一个springboot的后端微服务


proxy_pass直接映射主机无其他路径

1:location结尾有斜杠proxy_pass无斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test/ {
          proxy_pass http://localhost:8080;
        } 
}

proxy_pass结尾无斜杠,nginx会将请求路径全部代理过去

例如我的请求是  http://localhost:8001/nginx-test/test
请求路径为/nginx-test/test
代理后的路径为 /nginx-test/test
代理后的请求为 http://localhost:8080/nginx-test/test

2:location结尾有斜杠proxy_pass有斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test/ {
          proxy_pass http://localhost:8080/;
        } 
}

proxy_pass结尾有斜杠,nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/test
请求路径为/nginx-test/test
代理后的路径为 test
代理后的请求为 http://localhost:8080/test

3:location结尾无斜杠proxy_pass无斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test {
          proxy_pass http://localhost:8080;
        } 
}

proxy_pass结尾无斜杠,nginx会将请求路径全部代理过去

例如我的请求是  http://localhost:8001/nginx-test/test
请求路径为/nginx-test/test
代理后的路径为 /nginx-test/test
代理后的请求为 http://localhost:8080/nginx-test/test

4:location结尾无斜杠proxy_pass有斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test {
          proxy_pass http://localhost:8080/;
        } 
}


proxy_pass结尾有斜杠,nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/test
请求路径为/nginx-test/test
代理后的路径为 /test
代理后的请求为 http://localhost:8080//test

proxy_pass直接映射主机有其他路径

5:location结尾有斜杠proxy_pass无斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test/ {
          proxy_pass http://localhost:8080/test;
        } 
}

nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/api
请求路径为/nginx-test/api
代理后的路径为 api
代理后的请求为 http://localhost:8080/testapi

6:location结尾有斜杠proxy_pass有斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test/ {
          proxy_pass http://localhost:8080/test/;
        } 
}

nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/api
请求路径为/nginx-test/api
代理后的路径为 api
代理后的请求为 http://localhost:8080/test/api

7:location结尾无斜杠proxy_pass无斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test {
          proxy_pass http://localhost:8080/test;
        } 
}

nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/api
请求路径为/nginx-test/test
代理后的路径为 /api
代理后的请求为 http://localhost:8080/test/api

8:location结尾无斜杠proxy_pass有斜杠情况

server {
        listen       8001;
        server_name  localhost;
        root D:/nginx-1.19.3/html/dist;
  location /nginx-test {
          proxy_pass http://localhost:8080/test/;
        } 
}

nginx会将请求路径匹配location的剔除后再代理过去

例如我的请求是  http://localhost:8001/nginx-test/api
请求路径为/nginx-test/test
代理后的路径为 /api
代理后的请求为 http://localhost:8080/test//api

总结

案例

location

proxy_pass

结果

1

/nginx-test/

http://localhost:8080

/nginx-test/test

2

/nginx-test/

http://localhost:8080/

/test

3

/nginx-test

http://localhost:8080

/nginx-test/test

4

/nginx-test

http://localhost:8080/

//test

案例

location

proxy_pass

结果

5

/nginx-test/

http://localhost:8080/test

/testapi

6

/nginx-test/

http://localhost:8080/test/

/test/api

7

/nginx-test

http://localhost:8080/test

/test/api

8

/nginx-test

http://localhost:8080/test/

/test//api

相关文章
|
19天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
24天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
1月前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
201 1
nginx配置反向代理404问题
|
19天前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
33 4
|
19天前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
42 3
|
19天前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
72 3
|
19天前
|
缓存 负载均衡 安全
Nginx的反向代理具体是如何实现的?
Nginx的反向代理具体是如何实现的?
|
前端开发 应用服务中间件 Linux
一份简单够用的 Nginx Location 配置讲解
Location 是 Nginx 中一个非常核心的配置,这篇重点讲解一下 Location 的配置问题以及一些注意事项。
2325 0
一份简单够用的 Nginx Location 配置讲解
|
2月前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
4月前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
525 2