V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedRoute
V2EX  ›  程序员

想请教一个 Nginx 反向代理跳转的问题

  •  
  •   RedRoute · 2020-05-22 19:51:35 +08:00 · 2422 次点击
    这是一个创建于 1649 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,工作中遇到一个棘手的小问题,由于时间比较急,没查到详细的信息,所以想请教一下大家,谢谢啦

    如何用 nginx 将 IP 地址 /api/ 代理到 IP 地址 / ? 例子:IP 地址 /api/user/userlist 代理到 IP 地址 /user/userlist

    10 条回复    2020-05-23 08:51:44 +08:00
    lower
        1
    lower  
       2020-05-22 19:56:02 +08:00
    好像要用 rewrite
    fcxjluo
        2
    fcxjluo  
       2020-05-22 20:04:15 +08:00
    location /api/user/userlist {
    rewrite /api/user/userlist /user/userlist break;
    proxy_pass http://ip;
    }
    fcxjluo
        3
    fcxjluo  
       2020-05-22 20:05:13 +08:00
    location /api/user/userlist {
    rewrite /api/(.*) /$1 break;
    proxy_pass http://ip;
    }
    ragnaroks
        4
    ragnaroks  
       2020-05-22 20:06:14 +08:00
    google: proxy_pass
    foam
        5
    foam  
       2020-05-22 20:08:35 +08:00 via Android
    RedRoute
        6
    RedRoute  
    OP
       2020-05-22 22:45:37 +08:00 via Android
    @fcxjluo 非常感谢,后面我会好好学习一下的

    @ragnaroks 最近有点严,所以没出去查

    @foam 感谢分享,博客还蛮漂亮的,嘻嘻
    foam
        7
    foam  
       2020-05-22 23:44:45 +08:00
    @RedRoute 欢迎白天再来看看,是另一个模式哦
    zhengjian
        8
    zhengjian  
       2020-05-22 23:54:35 +08:00
    https://xuexb.github.io/learn-nginx/example/proxy_pass.html

    摘抄:

    // 访问: /api/ 后端: /
    // 访问: /api/xx 后端: /xx
    // 访问: /api/xx?aa 后端: /xx?aa
    // 访问: /api-xx?aa 未匹配
    location /api/ {
    proxy_pass http://node:8080/;
    }
    hstv
        9
    hstv  
       2020-05-22 23:58:36 +08:00
    @zhengjian 这个正解。
    location /api/ {
    proxy_pass http://ip; #会指向 http://ip/api/user/userlist
    proxy_pass http://ip/; #会指向 http://ip/user/userlist
    }
    RedRoute
        10
    RedRoute  
    OP
       2020-05-23 08:51:44 +08:00
    @zhengjian
    @hstv
    location /api/ {
    proxy_pass http://node:8080/;
    }
    感谢二位了,这个解法是对的,http://ip:8080/api/test 转发到 http://ip:8080/test,因为 IP 地址就是服务器地址,所以
    后来实现的写法是这样的

    server {
    listen 8080;
    root /abc/def;
    location / {
    index index.html;
    }
    location /api/ {
    proxy_pass http://127.0.0.1:8080/;
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:20 · PVG 17:20 · LAX 01:20 · JFK 04:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.