情况是这样的
因为公司所有项目需要统一迁移到某个服务器,请求由nginx进行分发。BOSS说希望我的项目的请求是这样的www.test.com/PprojectName/*
,意思是当请求过来时,他判断请求是第一层是PprojectName
是我的项目名字,那么他就把这个请求转给我,但是我的项目的请求都是这样的localhost:3000/book/list
,我要怎么满足BOSS的需求哦呢。
我的想法
因为本人是新手,想法可能比较幼稚。我的一个想法是这样的。当nginx判定这个请求是发给我的时候,在nginx转发给我的时候,把PprojectName
这个给去掉。举个例子:一个请求是这样的www.test.com/PprojectName/book/list
,当nginx转发给我的时候我收到的请求是这样的:localhost:3000/book/list
。因为对nginx也不是很熟不知道这样是否可行。
我还有一个想法是实现请求在服务器内部的跳转,就和forward一样。但是好像expressjs 并没有这个方法。
nginx 转发的时候可以设定的,只转发 * 的部份作为你接收的URL。也就转发这部分是可以直接把 test.com 的 ProjectName 映射到 localhost:3000 的根上。 但问题是你的静态资源,要注意路径就是了。
@klesh 谢谢你的回答,刚才和Boss讨论了一下通过nginx去解决这个方法,感觉这个方法不是特别好,请问一下有什么通过修改工程方法去解决这个问题的吗?
我觉得最简单的是通过二级域名去映射,而不是子文件夹,那样工程量太大了。而且路径名绑定死了! 然后你说修改工程的话我就不太明白了你想要达到一个什么样的效果了?一般这种情况不外乎就是静态文件引用路径的问题罢了。 至于服务端的URL响应问题,那倒是很简单,把所有 router 挂载到 ProjectName 下面不就行了,router 里面的响应都不用改。 app.use(’/ProjectName’, router);
@klesh 我使用node 不太熟可能描述的我有问题。目前我采用了二级域名的解决方法。
学一下nginx的代理设置部分,很简单就能解决