api.example.com 如何代理到 www.example.com/api/ 下?

2018-03-05 12:07:32 +08:00
 LeungJZ

我想要实现的结果是:

访问 api.example.com/hello/world

就相当于访问 www.example.com/api/hellp/world

这样。就是 url 看起来好看一点。

这是 nginx 的配置

然后访问,nginx 报错:no resolver defined to resolve

4216 次点击
所在节点    程序员
18 条回复
9200
2018-03-05 14:35:04 +08:00
首先你要把域名绑定服务器的 ip 地址

api.example.com 绑定 /api 这个目录就好了。

你这 nginx 配置文件好像写错了,
barble
2018-03-05 14:36:53 +08:00
这个 rewrite 就能办到,不用 proxy
oonnnoo
2018-03-05 15:59:45 +08:00
# 供参考

location @redirect {
rewrite ^/api/(.*)$ http://api.example.com/$1 redirect;
}

location /api/ {
proxy_set_header Host $host;
proxy_pass http://api.example.com/;
proxy_connect_timeout 3s;
error_page 500 502 504 @redirect;
}
oonnnoo
2018-03-05 16:04:43 +08:00
@oonnnoo #3 额。。。上一楼,我好像是弄反了,我再想想
580a388da131
2018-03-05 16:05:40 +08:00
绑定子目录就好了
menduo
2018-03-05 16:20:42 +08:00
没看出有什么总理 。location 换成 / 就行了吧。
menduo
2018-03-05 16:21:02 +08:00
没看出有什么问题 。location 换成 / 就行了吧。
JHerschel
2018-03-05 16:54:03 +08:00
在 proxy_pass 前面添加一条: " resolver 8.8.8.8; " 试试?
LeungJZ
2018-03-05 16:57:35 +08:00
@9200 /api 是个路由,并非真实文件夹。

@barble 我记得以前是 rewrite 但是我试过 rewrite,却跳转了。
@menduo 不行吧,我一开始就是 location / 还是无限重定向。

@JHerschel 我试试。
alvinbone88
2018-03-05 17:46:23 +08:00
nextvay
2018-03-05 17:52:34 +08:00
root /home/xxxx/api;
beginor
2018-03-05 19:36:11 +08:00
可以用 proxy_pass 或者 rewrite 都可以解决, 仔细看一下 nginx 的文档就行。

不过搭车问一下, 如果 api 中返回 http 重定结果向该怎么处理?
LeungJZ
2018-03-05 22:43:28 +08:00
@beginor
rewrite 好像也会 302 跳转到 rewrite 后的 url,能不能不让他跳呢?
yankebupt
2018-03-05 23:54:36 +08:00
为什么我觉得这样写会不会 www.example.com/api/api/api/api......无限循环...
是不是错觉
tomczhen
2018-03-06 00:25:24 +08:00
客户端支持的话可以考虑用 307 跳转
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/307
qiayue
2018-03-06 00:32:46 +08:00
最省事的做法是把 api.example.com 也指向到 www.example.com
然后 api 这样访问 api.example.com/api/hello/world
LeungJZ
2018-03-06 09:04:44 +08:00
@qiayue 就是不想这么访问啊。

@yankebupt 不是错觉,就是会。

@tomczhen 这个好像可以有,先试试。
LeungJZ
2018-03-24 22:34:02 +08:00
顶顶。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/434905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX