nginx反向代理配置去除前缀

作者: java高并发 | 来源:发表于2019-04-19 17:51 被阅读23次

    使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法:

    方法一:加"/"

    server {
        listen              8000;
        server_name         abc.com;
        access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    
        location ^~/user/ {
            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_set_header X-NginX-Proxy true;
    
            proxy_pass http://user/;
        }
    
        location ^~/order/ {
            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_set_header X-NginX-Proxy true;
    
            proxy_pass http://order/;
        }
    }
    

    ^~/user/表示匹配前缀是user的请求,proxy_pass的结尾有/, 则会把/user/*后面的路径直接拼接到后面,即移除user。

    方法二:rewrite

    upstream user {
      server localhost:8089 weight=5;
    }
    upstream order {
      server localhost:8090 weight=5;
    }
    
    server {
        listen              80;
        server_name  abc.com;
        access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    
        location ^~/user/ {
            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_set_header X-NginX-Proxy true;
    
            rewrite ^/user/(.*)$ /$1 break;
            proxy_pass http://user;
        }
    
        location ^~/order/ {
            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_set_header X-NginX-Proxy true;
    
            rewrite ^/order/(.*)$ /$1 break;
            proxy_pass http://order;
        }
    }
    

    proxy_pass结尾没有/, rewrite重写了url。

    欢迎工作一到五年的Java工程师朋友们加入Java高并发: 957734884,群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

    相关文章

      网友评论

        本文标题:nginx反向代理配置去除前缀

        本文链接:https://www.haomeiwen.com/subject/wkucgqtx.html