nginx根据url参数动态代理
nginx根据url参数动态代理
请求url格式,其中参数proxy后面的url就是需要访问的真实地址:
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/
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; } # 初次请求页面documentif ( $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; #有效# # } }