Nginx查看代理后的路径,含脚本

目录

数据输入格式:

测试截图:

总结:

脚本源码:


弄了一个shell脚本,根据输入的请求URL、location、proxy_pass输出代理后的请求路径,简单测试了下貌似还行,有问题请留言。

数据输入格式:

request URL, location, proxy_pass 空格分开 

http://localhost/api/test /api/ http://127.0.0.1:8000/
http://localhost/api/test /api/ http://127.0.0.1:8000
http://localhost/api/test /api/ http://127.0.0.1:8000/user/
http://localhost/api/test /api/ http://127.0.0.1:8000/user

去除location后,剩余部分:test

结果:http://127.0.0.1:8000/test              不需要加location     http://127.0.0.1:8000/ + test
结果:http://127.0.0.1:8000/api/test        需要加location         http://127.0.0.1:8000 + /api/ + test
结果:http://127.0.0.1:8000/user/test      不需要加location     http://127.0.0.1:8000/user/ + test
结果:http://127.0.0.1:8000/usertest       需要加location         http://127.0.0.1:8000/user + test(/api/test 去除 /api/)

http://localhost/api/test /api http://127.0.0.1:8000/
http://localhost/api/test /api http://127.0.0.1:8000
http://localhost/api/test /api http://127.0.0.1:8000/user/
http://localhost/api/test /api http://127.0.0.1:8000/user

去除location后,剩余部分:/test
结果:http://127.0.0.1:8000/test            不需要加location   http://127.0.0.1:8000/ + /test
结果:http://127.0.0.1:8000/api/test      需要加location       http://127.0.0.1:8000 + /api + /test
结果:http://127.0.0.1:8000/user/test    不需要加location   http://127.0.0.1:8000/user/ + /test
结果:http://127.0.0.1:8000/user/test    需要加location      http://127.0.0.1:8000/user + /test(/api/test 去除 /api)

测试截图:

总结:


location:
    以 / 结尾:保留请求路径的后续部分。
    不以 / 结尾:相对路径会被直接追加到 proxy_pass 的末尾。
proxy_pass:
    以 / 结尾:请求路径的后续部分会被附加到其后。
    不以 / 结尾:请求路径的后续部分会直接拼接到 proxy_pass 的路径后面。
    如果proxy_pass后面没有指定路径,Nginx会将整个路径发送到后端服务器。
    如果proxy_pass后面指定了路径,Nginx会移除location块中的前缀,并将剩余的路径附加到指定的路径后面。

脚本源码:

#!/bin/bash
# author: Amor

# 计算代理后URL的函数
calculate_proxied_url() {
    local request_url=$1
    local location=$2
    local proxy_pass=$3

    # 从请求URL中提取基础URL和路径
    local base_url=$(echo "$request_url" | sed -E 's|https?://[^/]+||')

    # 从基础URL中去除location部分
    local relative_path=${base_url#$location}
	#echo "$proxy_pass"
	#echo "$location"
	#echo "$relative_path"

    # 检查proxy_pass是否以斜杠结尾
    if [[ "$proxy_pass" =~ /$ ]]; then
        # 如果proxy_pass以斜杠结尾,直接拼接相对路径
        proxied_url="${proxy_pass}${relative_path}"
    else
        # 如果proxy_pass不以斜杠结尾,判断其最后一个字符
        if [[ "${proxy_pass: -1}" =~ [a-zA-Z] ]]; then
            # 如果proxy_pass以字母结尾,拼接location和相对路径
            proxied_url="${proxy_pass}${relative_path}"
        else
            # 如果proxy_pass不以字母结尾,直接拼接相对路径
            proxied_url="${proxy_pass}${location}${relative_path}"
        fi
    fi

    # 去除URL中的双斜杠(协议部分除外)
    proxied_url=$(echo "$proxied_url" | sed -E 's|([^:])/+|\1/|g')

    echo "$proxied_url"
}

echo "*************************************************************************"
while true; do
    # 读取输入
    echo
    read -p "请输入 request URL, location, proxy_pass 空格分开 (或输入 'exit' 退出): 
	
输入内容:  " request_url location proxy_pass

    # 判断是否退出程序
    if [[ "$request_url" == "exit" || "$location" == "exit" || "$proxy_pass" == "exit" ]]; then
        echo "退出程序。"
        break
    fi
    echo

    # 计算代理后URL
    proxied_url=$(calculate_proxied_url "$request_url" "$location" "$proxy_pass")

    # 输出代理后URL
    echo "代理后URL: $proxied_url"
    echo
    echo "*************************************************************************"
done

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值