在日常开发过程中,方便的我们测试服务端的代码,我们可以将前端服务器的请求代理到本地。首先,我们抓一个前端访问的请求进行分析
http://a.dev.b.com/c/api/d/e/f?pageNO=1&pageSize=10
从这个请求中我们可以发现,我们需要代理的域名是:http://a.dev.b.com/ ,看一眼本地的代码
@RequestMapping("/api/d/e")
也就是说,/api/d/e/f 是服务器端可以识别的。c只是一个虚拟的路径,需要被nginx映射掉。好了,分析结束,开始搞起来了。首先配置本地的hosts文件。增加配置,将http://a.dev.b.com/ 映射到本地
127.0.0.1 a.dev.b.com
随后配置nginx.conf文件,增加代理。
server {
listen 80;
server_name a.dev.b.com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /c {
proxy_pass http://localhost:9999/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Read-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
监听http://a.dev.b.com/的80端口,如果有请求过来,并且链接中带有c,就将此请求转发到本地的9999端口,这个对应的就是我们自己的服务。
image2017-1-19 15-35-15.png然后前端服务器的请求就转发到了本地的服务器上,方便我们本地调试了。
这里有一个小说明就是proxy_pass配置说明,proxy_pass转发的路径后是否带 “/”,是影响你正常跳转的一个方面。例如
例1
location /test/
{
proxy_pass http://test:8080;
}
例2
location /test/
{
proxy_pass http://test:8080/;
}
针对情况1,如果访问url = http://server/test/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/test/test.jsp,将test/ 作为根路径,请求test/路径下的资源
针对情况2,如果访问url = http://server/test/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源.
网友评论