默认情况下apache/nginx的正向代理,都默认访问的服务是常规的80端口,但是总有那么几个特殊服务是非80端口的,如果非要用正向代理来解决(用反向代理来解决更容易,但有时候服务场景限制只能使用正向代理),那么可以使用nginx+lua来解决:
**通过获取客户端请求的端口号,然后追加到要正向代理的地址上即可。 **
if ($http_host ~ "(:(\d){4})$"){
set_by_lua $port "
local host = ngx.req.get_headers()[\"host\"];
local port = string.sub(host,-4);
return port ";
set $passport $port ;
proxy_pass http://$host:$passport$request_uri;
}
if ($http_host ~ "(:(\d){3})$"){
set_by_lua $port "
local host = ngx.req.get_headers()[\"host\"];
local port = string.sub(host,-3);
return port ";
set $passport $port ;
proxy_pass http://$host:$passport$request_uri;
}
if ($http_host ~ "(:(\d){2})$"){
set_by_lua $port "
local host = ngx.req.get_headers()[\"host\"];
local port = string.sub(host,-2);
return port ";
set $passport $port ;
proxy_pass http://$host:$passport$request_uri;
}
if ($http_host !~ :){
proxy_pass http://$host$request_uri;
}