Java web编程中经常涉及到重定向的问题,servlet实现了两种重定向的方式:服务器内部重定向(也叫forward,请求转发),和客户端重定向(redirect)。
大多数的web应用服务器都会在前端加上一个nginx作为反向代理层,目地为了安全或者负载均衡,nginx对于静态文件的处理能力比较高效,往往会有这种需求:由web应用服务器做动态的下载权限的验证,然后把下载的事情交给nginx去做,同时又不想直接把文件地址暴露给用户,于是必须使用到nginx服务端重定向的技术。回想一下nginx本身做反向代理的能力,设置一个proxy_pass,本身就起到了隐藏背后url的功能,只不过是写死在配置文件中的,这里的需求是一个下载请求过来以后,web应用服务器处理完验证逻辑后才代理到其他的url,所以这个代理的请求必须由web应用服务器自己来发。
server{
listen 80;
server_name localhost;
location /protect {
proxy_pass
internal;
}
location / {
proxy_pass http://127.0.0.1:8089/;
}
}
response.addHeader("X-Accel-Redirect", "/protect")