Nginx反向代理如何到访问者机器上(后端调试)

 更新时间:2024年06月18日 10:43:30   作者:No Big Deal  

这篇文章主要介绍了Nginx反向代理如何到访问者机器上(后端调试),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

目录
  • Nginx反向代理到访问者机器上
    • 起因
    • 配置
  • Nginx反向代理实现指定接口访问指定机器
    • location表达式类型
    • 匹配的优先级顺序
    • 需求
  • 总结

    Nginx反向代理到访问者机器上

    起因

    因一名后端开发,不想使用postman等工具进行接口调试,因为web系统需要经过N多步骤的前置动作,不能保证参数的有效性,因此,需要直接点击web系统,触发本地后端代码。

    但是,总不可能动不动就让前端给自己起一个项目吧,于是就用nginx进行部署前端项目,代理转发的形式,将接口转发到后端机器上。

    因此有了关于这个配置的折腾。

    配置

    以下配置是用shell脚本生成的,需要参考脚本生成配置的,可以自己去翻下

    配置内容,就以注释形式进行说明

    # financeapi server配置 由脚本生成
    server {
        listen 1001;
        
        ### 因为涉及到第三方的文件服务器,当特定的接口匹配时,转发到第三方文件服务器上
        ### 307的作用是:在转发过程中不改变原是请求的任何内容(请求方式、请求头、请求体等)
        location  /fronteapi/fs/uploadFile/ {
            return 307 http://10.10.10.10/fronteapi/fs/uploadFile/;
        }
    	### 后端接口主要在这个路由里进行匹配
    	
        location  /frontapi/ {
        	### 因为proxy_pass是自己拼接的,不是写死的字符串,因此在进行代理转发时,
        	### 会丢失请求参数,需要提前保存,最后拼在proxy_pass上
            if ($request_uri ~* "financeapi(/.*$)") {
                set  $path_remainder  $1;
            }
            ### 代理转发的主要配置,$remote_addr为nginx内置的变量,可表示访问者的IP,本文主题就是这个变量体现的
            
            proxy_pass http://$remote_addr:8079/$path_remainder;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_cookie_path / "/; HTTPOnly; SameSite=Lax; Max-Age=86400";
        }
    	
    	### 静态前端项目的根目录路径配置,相当于入口
        location / {
            root /home/docker/frontApp/front-web/dist;
            index index.html;
            try_files $uri $uri/ /index.html;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_cookie_path / "/; HTTPOnly; SameSite=Lax; Max-Age=86400";
        }
    	
    	### 因为认证用的是3方认证服务,因此当如下路径触发时候,需要重写当前路径
        location = /auth/oauth2/authorize {
            rewrite ^  http://xxx/auth/oauth2/authorize;
        }
       
    }
    # financeapi server配置 生成成功
    

    Nginx反向代理实现指定接口访问指定机器

    location表达式类型

    • location = 表示精确匹配
    • location ^~ 表示uri以指定字符或字符串开头
    • location ~ 表示区分大小写的正则匹配
    • location ~* 表示不区分大小写的正则匹配
    • location / 通用匹配,任何请求都会匹配到

    匹配的优先级顺序

    ( localtion = ) > ( localtion 完整url ) > ( localtion ^~ ) > ( localtion ,* ) > ( lcoaltion部分起始路径 ) > ( / )

    需求

    nginx反向代理某服务有两个负载,要求 某个 或者 某系列 请求 打向指定负载

    • 定义upstream
        #7080 7091 2负载服务
    	upstream gateway-all {
            server 127.0.0.1:7080;
            server 127.0.0.1:7081;
        }
    	#7080服务
        upstream gateway-7080 {
            server 127.0.0.1:7080;
        }
    	#7081服务
        upstream gateway-7081 {
            server 127.0.0.1:7081;
        }

    要求 /api/v1/login 请求 7080机器,/api/v1/logout 请求 7081机器,其他请求走负载,/test-gateway 是反向代理服务的上下文

    • 实现一:定义不同的localtion,路由不同的uri
        location /test-gateway/api/v1/login  {
        	#指向上面的upstream
            proxy_pass http://gateway-7080;
        }
        
        location /test-gateway/api/v1/logout  {
        	#指向上面的upstream
            proxy_pass http://gateway-7081;
        }    
        
        location /test-gateway  {
        	#指向上面的upstream
            proxy_pass http://gateway-all;
        }
    • 实现二:一个localtion,路由不同的uri
        location /test-gateway {
    		if ($request_uri ~* "/api/v1/login"){
    			proxy_pass http://gateway-7080;
    		}
    		if ($request_uri ~* "/api/v1/logout"){
    			proxy_pass http://gateway-7081;
    		}
            proxy_pass http://gateway-all;
        }

    location 灵活多变,具体哪种适合自己,根据自己的业务场景来做选择

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持小闻网。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。