V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

请教一个 nginx 转发 tomcat 的配置问题

  •  1
     
  •   Newyorkcity · 2019-08-24 22:27:35 +08:00 · 1169 次点击
    这是一个创建于 1913 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想要针对所有向 wangzhan.com/api/{something} 发起的请求,然后把它变成 wangzhan.com/{something} (也就是说把 /api 给去掉) 发给监听 8080 端口的 tomcat 该如何做呢?

    我自己其实之前写了一个,还以为成功了,然而这个其实非常坑爹。如果有大佬有兴趣可以看一下我的这个代码看看能不能直接看出遇上啥问题

        server {
            listen  80 default_server;
            server_name 这行没啥问题,自己小破站的网址就不贴了
    
            if ( $request_uri !~ ^/api/.*$ ){
                rewrite ^/(.*)$ https://$server_name/$1 permanent;
            }
    
            location ~ ^/api/(.*)$ {
                echo $1; #为什么能用 echo ?因为我安装了 echo-nginx-module 这个模块
                # proxy_pass http://127.0.0.1:8080/$1; 这个是我原来写的,后来我觉得哪里不对于是用 echo 进行测试,才注释掉了这一行有了上面一行
            }
        }
    
    要是有大佬找乐子 要决定直接看出问题
    
    
    所以我这里
    
    
    空几行
    
    
    大佬喝茶
    
    

    问题如下:

    root@VM-133-145-debian:~# curl localhost/api/hello
    hello
    root@VM-133-145-debian:~# curl localhost/api/hello?a=b
    hello
    
    8 条回复    2019-08-26 10:05:35 +08:00
    nieqibest
        1
    nieqibest  
       2019-08-25 00:26:58 +08:00 via Android   ❤️ 1
    location ^~ /api/ {
    proxy_pass http:127.0.0.1:8080/;
    }
    直接这样就可以了,少用 if
    hardwork
        2
    hardwork  
       2019-08-25 08:23:48 +08:00 via Android
    意思是漏了参数吗
    Newyorkcity
        3
    Newyorkcity  
    OP
       2019-08-25 10:29:33 +08:00
    @hardwork 是的
    Newyorkcity
        4
    Newyorkcity  
    OP
       2019-08-25 10:29:45 +08:00
    @nieqibest 额,这样 /api 没有被删掉啊
    zw1one
        5
    zw1one  
       2019-08-25 10:46:59 +08:00   ❤️ 2
    location /api {
    if ($request_uri ~* "/api/(.*)") {
    proxy_pass http://java-api/$1;
    }
    }
    Newyorkcity
        6
    Newyorkcity  
    OP
       2019-08-25 11:09:53 +08:00
    @zw1one 诶,有效果了!请问是因为 location 的匹配字符串会自动删去后面的请求参数么?你是怎么了解到这个知识点的啊?
    nieqibest
        7
    nieqibest  
       2019-08-25 15:24:51 +08:00
    @Newyorkcity 你试验了?
    zw1one
        8
    zw1one  
       2019-08-26 10:05:35 +08:00
    @Newyorkcity "$1"是指~* "/api/(.*)"中匹配的第一个段,即(.*)的匹配。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.