nginx dynamic proxy based on url parameters
Request url format, in which the url after the proxy parameter is the real address that needs to be accessed:
http://localhost:9388/?proxy=http://localhost:8038/Content/layui/font/iconfont.woff?v=256
http ://localhost:9388/?proxy=http://localhost:8072/article/ArticleInfo/12309f4e71be45bf943f5b1346162e42
http://localhost:9388/?proxy=http://localhost:8038/user/login
http://localhost :9388/?proxy=http://99.89.11.137:8833/
Windows version of nginx:
server {
listen 9388;
server_name localhost;
resolver 192.168.2.1; # 配置DNS
# resolver 192.168.2.234;
# 申明变量
set $realHost "333";
set $backend_host "333";
#获取url的域名
if ($arg_proxy ~ ^(http(s)?://)?([^/?]*)(.*)?$ ){
set $backend_host $3;
}
#解析真实后台地址域名,针对于请求css、js文件
if ($http_referer ~* proxy=(http(s)?://)?([^/?]*)(.*)?$ ){
set $realHost $3;
}
# 当下载css文件里面的相对路径文件时,会出现500错误
# 比如http://localhost:9388/Content/layui/font/iconfont.woff2?v=256
if ( $realHost = "333" ){
set $realHost $cookie_cookieHost;
}
location / {
proxy_set_header Host $backend_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header whl_host $backend_host;
#自定义响应头
add_header whl_host $backend_host;
add_header whl_url $arg_proxy;
# 请求图片、css、js
if ( $http_Sec_Fetch_Dest ~* (image|script|style|font) )
{
add_header whl_file_host $realHost;
add_header whl_file_url $uri;
proxy_pass http://$realHost; # 有效
break;
}
# 接口请求
if ( $http_X_Requested_With ~* XMLHttpRequest )
{
add_header whl_XMLHttpRequest_host $realHost;
add_header whl_XMLHttpRequest_url $uri;
proxy_pass http://$realHost;
break;
}
# 初次请求页面document
if ( $arg_proxy ){
add_header Set-Cookie 'cookieHost=$backend_host;path=/;';
add_header whl_arg_proxy $arg_proxy;
proxy_pass $arg_proxy;
break;
}
proxy_pass http://$realHost;
}
# # location ~* \.(js|css|gif|jpg|jpeg|jfif|png|bmp|swf|ico|woff2|woff|ttf|mp4|flv)$
# location ~* \.(js|css|swf|woff2|woff|ttf|mp4|flv)$
# {
# proxy_next_upstream http_502 http_504 error timeout invalid_header;
# proxy_set_header whl_host $backend_host;
# proxy_set_header whl_url $arg_proxy;
# proxy_set_header Host $backend_host;
# proxy_set_header X-Forwarded-For $remote_addr;
# proxy_set_header X-Real-IP $remote_addr;
#
# #自定义响应头
# add_header whl_host $backend_host;
# add_header whl_url $arg_proxy;
# add_header whl_req_url $query_string;
# add_header whl_http_referer $http_referer;
# add_header whl_real_host $realHost;
# add_header whl_get_cookieHost $cookie_cookieHost;
# add_header whl_http_Accept $http_Accept;
# add_header whl_Sec_Fetch_Dest $http_Sec_Fetch_Dest;
#
# proxy_pass http://$realHost; #有效
#
# }
}