1.2.
local url = "">
return url
重新发起请求:http://localhost/proxy/lua?name=tom&age=20
并在远程机器上监控Access日志, 接收到的请求为:"GET /proxy/lua?name=tom&age=20 HTTP/1.0",参数传递过来了。
不解,遂继续以下试验,不用lua:
2.
2.1 location /proxy/lua {
proxy_pass tom.test.web.com;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
远程机器上查看Access日志:"GET /proxy/lua?name=tom&age=20 HTTP/1.0",参数传递过来了。
2.2 location /proxy/lua {
proxy_pass tom.test.web.com/proxy/lua;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
监控日志:"GET /proxy/lua?name=tom&age=20 HTTP/1.0" 参数传递过来了。
到这里就开始感到很奇怪了,同一个URL,通过lua传递时,发现参数没有传递过来,而直接写在proxy_pass后面的参数居然传递过来了。
然后觉得可能是变量问题,继续用Nginx变量重新进行试验:
3.
3.1 location /proxy/lua {
set $proxy_server "tom.test.web.com/proxy/lua";
proxy_pass $proxy_server;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
监控远程机器日志:"GET /proxy/lua HTTP/1.0" 参数没有传过来
3.2 location /proxy/lua {
set $proxy_server "tom.test.web.com";
proxy_pass $proxy_server;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
监控远程机器日志:"GET /proxy/lua?name=tom&age=20 HTTP/1.0" 参数传过来了
由以上试验得出,通过变量设置proxy_pass的URL时,如果URL后面除了域名还有路径,则参数传递不过去,
故又进行了如下试验:
加参数进行试验:
4.
4.1.location /proxy/lua {
set $proxy_server "tom.test.web.com/proxy/lua?name=tom&age=20";
proxy_pass $proxy_server;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
监控远程机器日志:"GET /proxy/lua?name=tom&age=20 HTTP/1.0"
4.2.location /proxy/lua {
set $proxy_server "tom.test.web.com?name=tom&age=20";
proxy_pass $proxy_server;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
监控远程机器日志:"GET /proxy/lua?name=tom&age=20 HTTP/1.0"
4.3
location /proxy/lua {
proxy_pass tom.test.web.com?name=tom&age=20;
}
发起请求:http://localhost/proxy/lua?name=tom&age=20
总结下上面的试验得到的结论如下:
1.通过变量设置proxy_pass的URL时,如果URL后面除了域名还有路径("/"也是路径),则参数传递不过去,如果想把参数能传递过去,必须显示接收参数并往后面传递;而不通过变量设置的proxy_pass则没有这个问题,见试验3。
2.直接设置URL时,域名后面不能直接跟“?”,会报400错误
疑惑如下:
1.为什么通过变量设置proxy_pass的URL,且后面跟有路径时,参数会传递不过去?而直接设置proxy_pass,参数就能传递过去?这块章老师或其他同学能给详细解释下么?(见2.2和3.1)
2.直接设置proxy_pass 的URL时,域名后面直接跟“?”,为什么报400错误,而通过变量设置proxy_pass的URL,域名后面直接跟“?”就不会有这个错误?(见4.2和4.3)
麻烦了解的同学详细解释下。