我有一个命名空间为/api/
的内部API服务器,我想使用proxy_pass
将所有其他请求传递到Amazon S3静态站点。这一切都很好,只是因为Amazon提供的是单页面应用程序,所以我想总是返回相同的HTML文件。我在S3服务器上是这样做的,将索引和错误页设置为同一个文件。表面上看起来一切正常,但是对于/
之外的所有其他请求,S3示例返回404。在将其返回给客户端之前,我可以使用NGINX将其更改为200吗?
server {
listen 80;
server_name example.com;
location /api/ {
# serve internal app
}
location / {
proxy_pass http://example.amazonaws.com/;
# ALWAYS RETURN A 200
}
}
2条答案
按热度按时间g9icjywg1#
你应该能够使用error_page和proxy_intercept_errors指令来实现这个目标,类似这样的东西应该可以。
bwntbbo32#
您可以在内部重写所有指向您要提供的文档的URL。这避免了错误处理循环和有问题的重定向。
它可能是这样的(未经测试):
请注意,您可能希望在文档中只使用完整URL或根相对URL,因为您不知道文档是否是从子目录提供的。
你也应该明智地使用JS代码来验证URL,并选择性地重定向到一个你认为有效的URL,否则第三方网站可能会链接到攻击性的URL,并将其放入搜索索引中!