http://localhost/render/....下的请求都去访问 http://localhost:3000
但是lhttp://localhost:3000 路径中又都不带render 比如 http://localhost/render/a 是 http://localhost:3000/a,
请问nginx 如何配置
http://localhost/render/....下的请求都去访问 http://localhost:3000
但是lhttp://localhost:3000 路径中又都不带render 比如 http://localhost/render/a 是 http://localhost:3000/a,
请问nginx 如何配置
$ wget 127.0.0.1/render/a
location ^~ /render {
proxy_pass http://127.0.0.1:3000/; // http://127.0.0.1:3000/a
}
location ^~ /render {
proxy_pass http://127.0.0.1:3000; // http://127.0.0.1:3000/render/a
}
不知道是不是这个需求
这其实就是一个虚拟目录的问题。如果你在iis下开发过虚拟目录网站就知道,这个一开始就限制了你的网站路径规划。所以除非你能修改网站路径规划,否则你可以直接放弃了。
修改的方式简单说就是加入一个配置变量prefix,在每个有路径的地方都加入$prefix这样的前缀,发布前根据情况替换$prefix。当然,如果你使用了页面模版,那么相对就轻松多了。
http://localhost/render/a写成./a,浏览器获取资源时会自动添加完整域名用来补全
配置的话nginx配置中有个"location / {"的配置项,更改一下就行了
15 回答8.4k 阅读
2 回答2.4k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
3 回答898 阅读
1 回答778 阅读
1 回答620 阅读
你这种需求属于不同prefix的反向代理,我以前搞过。我的经验是建议你趁早放弃,这种需求非常难搞,几乎不太可能在不修改后端的条件下,仅靠nginx完成。
给你举个例子,你的后端实际是
localhost:3000/a
,而你的反向代理前段期望用户访问的路径是localhost/render/a
。URL location问题可以在nginx做,但是返回的html
的内容nginx却没有办法直接修改。所以你代理得到的html页面的内容可能写的还是/a/xxx.js
,而不是你期望的/render/a/xxx.js
,于是反向代理失效。解决方法只能是把后端的prefix改掉,改成和前段反向代理同样加一层
/render/
。或者能自适应,同时支持直接访问与反向代理,但是这样后端的设计会复杂。唯一能搞的就是你的后端是一个Restful的api,或者是download下载站,几乎不会返回html页面的这种,那没问题,配置也简单,直接反向代理即可。
以前用apache有个rewrite_html的插件,这个插件可以在反向代理的时候直接修改a标签的链接,达到让反向代理生效的目的,不过依旧很难搞,因为页面上并不只是标签会涉及到路径,还有js中也可能会引用一些其他资源的路径,所以rewrite_html也不一定完全能实现你的需求。
此外,还有更多的坑等着你,期待你去发掘。