nginx 反向代理的语法解析

227 阅读1分钟

在Nginx代理中,proxy_pass指令用于将客户端请求转发到后端服务器。根据不同的配置格式,proxy_pass的行为会有所不同。以下是几种常见的书写格式及其解释:

  1. location 和 proxy_pass 都不带 URI 路径
   location / {
       proxy_pass http://x.x.x.x:5192;
   }

这种情况下,客户端请求的URI会被原封不动地传递给后端服务器。例如,请求(http://example.com/jjjc/ )会被转发到(http://x.x.x.x:5192/jjjc/ )`。

  1. location 带 URI 路径,proxy_pass 不带 URI 路径
   location /jjjc/ {
       proxy_pass http://x.x.x.x:5192;
   }

这种情况下,客户端请求的URI会被原封不动地传递给后端服务器。例如,请求(http://example.com/jjjc/ )会被转发到(http://x.x.x.x:5192/jjjc/ )

  1. location 和 proxy_pass 都带 URI 路径
   location /jjjc/ {
       proxy_pass http://x.x.x.x:5192/jjjc/;
   }

这种情况下,location匹配的部分会被从客户端请求的URI中移除,并拼接到proxy_pass指定的URI后面。例如,请求(http://example.com/jjjc/test )会被转发到(http://x.x.x.x:5192/jjjc/test )

  1. location 带 URI 路径,proxy_pass 带 URI 路径且末尾不带 /
   location /jjjc/ {
       proxy_pass http://x.x.x.x:5192/jjjc;
   }

这种情况下,location匹配的部分会被从客户端请求的URI中移除,并拼接到proxy_pass指定的URI后面。例如,请求(http://example.com/jjjc/test )会被转发到(http://x.x.x.x:5192/jjjctest )

  1. 使用正则表达式匹配 location
   location ~ /api/(.*) {
       proxy_pass http://x.x.x.x:5192/$1;
   }

这种情况下,可以使用正则表达式来匹配更复杂的路径,并将匹配的部分传递给后端服务器。例如,请求(http://example.com/api/test )会被转发到(http://x.x.x.x:5192/test )

  1. 使用变量
   location / {
       proxy_pass http://x.x.x.x:5192$request_uri;
   }

这种情况下,可以使用Nginx变量来动态构建代理URL。例如,请求(http://example.com/jjjc/test )会被转发到(http://x.x.x.x:5192/jjjc/test )

这些不同的配置格式可以根据实际需求灵活使用,以实现不同的代理行为。需要注意的是,proxy_pass指令中的URL末尾是否带有斜杠(/)会影响Nginx如何处理客户端请求的URI。